Sha256: 3f60925bda52eded2175d5c9c50acde900214945110607192351f16bef32fb9f

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

module Ironfan
  class Dsl

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

      magic      :instances,    Integer,              default: 1
      collection :servers,      Ironfan::Dsl::Server, resolver: :deep_resolve
      field      :cluster_name, String

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

      def initialize(attrs = {}, &blk)
        self.cluster_names  attrs[:owner].cluster_names unless attrs[:owner].nil?
        self.realm_name     attrs[:owner].realm_name    unless attrs[:owner].nil?
        self.cluster_name = attrs[:owner].cluster_name  unless attrs[:owner].nil?
        self.name         = attrs[:name]                unless attrs[:name].nil?
        self.facet_role     Ironfan::Dsl::Role.new(name: "#{full_name}-facet")
        super
        (0..instances - 1).each{ |idx| server idx }
      end

      def children
        servers.to_a + components.to_a
      end

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ironfan-6.0.1 lib/ironfan/dsl/facet.rb
ironfan-6.0.0 lib/ironfan/dsl/facet.rb