class Circuitry::Provisioning::Provisioner

Attributes

logger[RW]

Public Class Methods

new(logger) click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 9
def initialize(logger)
  self.logger = logger
end

Public Instance Methods

run() click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 13
def run
  queue = create_queue
  subscribe_topics(queue, create_topics(:subscriber, subscriber_config.topic_names)) if queue
  create_topics(:publisher, publisher_config.topic_names)
end

Private Instance Methods

create_queue() click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 31
def create_queue
  if subscriber_config.queue_name.nil?
    logger.info 'Skipping queue creation: queue_name is not configured'
    return nil
  end

  safe_aws('Create queue') do
    queue = QueueCreator.find_or_create(
      subscriber_config.queue_name,
      dead_letter_queue_name: subscriber_config.dead_letter_queue_name,
      max_receive_count: subscriber_config.max_receive_count,
      visibility_timeout: subscriber_config.visibility_timeout
    )
    logger.info "Created queue #{queue.url}"
    queue
  end
end
create_topics(type, topics) click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 49
def create_topics(type, topics)
  safe_aws("Create #{type.to_s} topics") do
    topics.map do |topic_name|
      topic = TopicCreator.find_or_create(topic_name)
      logger.info "Created topic #{topic.name}"
      topic
    end
  end
end
publisher_config() click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 23
def publisher_config
  Circuitry.publisher_config
end
safe_aws(desc) { || ... } click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 68
def safe_aws(desc)
  yield
rescue Aws::SQS::Errors::AccessDenied
  logger.fatal("#{desc}: Access denied. Check your configured credentials.")
  nil
end
subscribe_topics(queue, topics) click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 59
def subscribe_topics(queue, topics)
  safe_aws('Subscribe to topics') do
    SubscriptionCreator.subscribe_all(queue, topics)
    plural_form = topics.size == 1 ? '' : 's'
    logger.info "Subscribed #{topics.size} topic#{plural_form} to #{queue.name}"
    true
  end
end
subscriber_config() click to toggle source
# File lib/circuitry/provisioning/provisioner.rb, line 27
def subscriber_config
  Circuitry.subscriber_config
end