Project

General

Profile

« Previous | Next » 

Revision 4d4b84f6

Added by Ohad Levy almost 13 years ago

  • ID 4d4b84f6b722874504f508fa92802f6ddee37c11

fixes #35 - Allow hostgroup nesting for puppet classes and parameters

View differences:

app/models/hostgroup.rb
class Hostgroup < ActiveRecord::Base
has_ancestry :orphan_strategy => :rootify
include Authorization
include HostCommon
has_and_belongs_to_many :puppetclasses
has_and_belongs_to_many :users, :join_table => "user_hostgroups"
validates_uniqueness_of :name
validates_uniqueness_of :name, :scope => :ancestry
validates_format_of :name, :with => /\A(\S+\s?)+\Z/, :message => "can't be blank or contain trailing white spaces."
has_many :group_parameters, :dependent => :destroy, :foreign_key => :reference_id
accepts_nested_attributes_for :group_parameters, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true
......
#TODO: add a method that returns the valid os for a hostgroup
def all_puppetclasses
puppetclasses
classes
end
alias_method :to_label, :to_s
def to_label
"/" + ancestors.map{|a| a.name + "/"}.join + name
end
def as_json(options={})
super({:only => [:name, :id, :value], :include => [:puppetclasses, :group_parameters, :environment]}.merge(options))
super({:only => [:name, :id], :methods => [:classes, :parameters], :include => [:puppetclasses, :group_parameters, :environment]}.merge(options))
end
def hostgroup
......
ptable.layout
end
def classes
klasses = []
ids = ancestor_ids
ids << id unless new_record? or self.frozen?
Hostgroup.sort_by_ancestry(Hostgroup.find(ids, :include => :puppetclasses)).each do |hg|
klasses << hg.puppetclasses
end
klasses.flatten
end
# returns self and parent parameters as a hash
def parameters
hash = {}
ids = ancestor_ids
ids << id unless new_record? or self.frozen?
Hostgroup.sort_by_ancestry(Hostgroup.find(ids, :include => :group_parameters)).each do |hg|
hg.group_parameters.each {|p| hash[p.name] = p.value }
end
hash
end
def params
parameters = {}
# read common parameters
......
# read OS parameters
operatingsystem.os_parameters.each {|p| parameters.update Hash[p.name => p.value] } unless operatingsystem.nil?
# read group parameters only if a host belongs to a group
hostgroup.group_parameters.each {|p| parameters.update Hash[p.name => p.value] } unless hostgroup.nil?
parameters.update self.parameters unless hostgroup.nil?
parameters
end

Also available in: Unified diff