Sha256: 4fa89c227be16cc8c14e57493a1bf81fe42b162d71b029344701473d29b6a44d

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module Ironfan
  class Dsl
    class Cluster < Ironfan::Dsl::Compute
      include Ironfan::Plugin::Base; register_with Ironfan::Dsl::Realm

      collection :facets, Ironfan::Dsl::Facet, resolver: :deep_resolve

      def self.plugin_hook(owner, attrs, plugin_name, full_name, &blk)
        owner.cluster(plugin_name, new(attrs.merge(name: full_name, owner: owner)))
        _project(cluster, &blk)
      end

      def self.definitions
        @clusters ||= {}
      end

      def self.define(attrs = {}, &blk)
        cl = new(attrs)
        cl.receive!({}, &blk) # the ordering of the initialize method is super fragile
        definitions[attrs[:name].to_sym] = cl
      end
      
      def initialize(attrs = {}, &blk)
        super
        self.realm_name    attrs[:owner].name          unless attrs[:owner].nil?
        self.cluster_names attrs[:owner].cluster_names unless attrs[:owner].nil?
        self.cluster_role  Ironfan::Dsl::Role.new(name: Compute.cluster_role_name(realm_name, cluster_name))
      end

      def resolve
        self.class.definitions[name.to_sym] = super
      end

      # Utility method to reference all servers from constituent facets
      def servers
        result = Gorillib::ModelCollection.new(item_type: Ironfan::Dsl::Server, key_method: :full_name)
        facets.each{ |f| f.servers.each{ |s| result << s } }
        result
      end

      def children
        facets.to_a + components.to_a
      end

      def cluster_name
        name
      end

      def full_name
        "#{realm_name}-#{name}"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ironfan-6.1.4 lib/ironfan/dsl/cluster.rb
ironfan-6.1.3 lib/ironfan/dsl/cluster.rb