Sha256: cb251a5edb9389131ed68234a412f1d4b9b769e730bb45a5b70ca25212aca5b4

Contents?: true

Size: 1.33 KB

Versions: 7

Compression:

Stored size: 1.33 KB

Contents

require 'aws-sdk'
require 'hollerback'

require_relative './service'

module Rollo
  module Model
    class ServiceCluster
      def initialize(ecs_cluster_name, region, ecs_resource = nil)
        @region = region
        @ecs_cluster_name = ecs_cluster_name
        @ecs_resource = ecs_resource || Aws::ECS::Resource.new(region: region)
        @ecs_cluster = get_ecs_cluster
      end

      def name
        @ecs_cluster_name
      end

      def replica_services
        get_ecs_service_arns
            .collect {|arn| Service.new(@ecs_cluster_name, arn, @region)}
            .select(&:is_replica?)
      end

      def with_replica_services(&block)
        all_replica_services = replica_services

        callbacks = Hollerback::Callbacks.new(block)
        callbacks.try_respond_with(
            :start, all_replica_services)

        all_replica_services.each do |service|
          callbacks.try_respond_with(:each_service, service)
        end
      end

      private

      def get_ecs_cluster
        @ecs_resource.client
            .describe_clusters(clusters: [@ecs_cluster_name])
            .clusters[0]
      end

      def get_ecs_service_arns
        @ecs_resource.client
            .list_services(cluster: @ecs_cluster.cluster_name)
            .inject([]) {|arns, response| arns + response.service_arns}
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rollo-0.7.0 lib/rollo/model/service_cluster.rb
rollo-0.6.0 lib/rollo/model/service_cluster.rb
rollo-0.5.0 lib/rollo/model/service_cluster.rb
rollo-0.4.0 lib/rollo/model/service_cluster.rb
rollo-0.3.0 lib/rollo/model/service_cluster.rb
rollo-0.2.0 lib/rollo/model/service_cluster.rb
rollo-0.1.0 lib/rollo/model/service_cluster.rb