Sha256: 90baec7ec61f62eb2cebb9a5adf45079617837b20f73fd122e013b3dd0879201

Contents?: true

Size: 1.46 KB

Versions: 7

Compression:

Stored size: 1.46 KB

Contents

module OpenStax::Aws
  class Distribution

    attr_reader :id, :region, :logger

    def initialize(id:, region:, logger: nil)
      @id = id
      @region = region
      @logger ||= Logger.new(IO::NULL)
    end

    def invalidate(paths:, wait: false)
      paths = [paths].flatten.compact

      resp = client.create_invalidation({
        distribution_id: id,
        invalidation_batch: {
          paths: {
            quantity: paths.length,
            items: paths,
          },
          caller_reference: "#{paths.join(' ')} #{Time.now.utc.strftime("%Y%m%d-%H%M%S")}"
        },
      })

      invalidation_id = resp.invalidation.id

      logger.info("Created invalidation #{invalidation_id} for paths #{paths.join(', ')}.")

      wait_message = OpenStax::Aws::WaitMessage.new(
        message: "Waiting for invalidation #{invalidation_id} to be completed"
      )

      begin
        Aws::CloudFront::Waiters::InvalidationCompleted.new(
          client: client,
          before_attempt: ->(*) { wait_message.say_it },
          max_attempts: 60
        ).wait(
          distribution_id: id,
          id: invalidation_id
        )
      rescue Aws::Waiters::Errors::WaiterFailed => error
        logger.error "Waiting failed: #{error.message}"
        raise
      end
      logger.info "Invalidation #{invalidation_id} has been completed!"
    end

    protected

    def client
      @cloudfront_client ||= ::Aws::CloudFront::Client.new(region: region)
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
openstax_aws-2.1.0 lib/openstax/aws/distribution.rb
openstax_aws-2.0.1 lib/openstax/aws/distribution.rb
openstax_aws-2.0.0 lib/openstax/aws/distribution.rb
openstax_aws-1.6.1 lib/openstax/aws/distribution.rb
openstax_aws-1.6.0 lib/openstax/aws/distribution.rb
openstax_aws-1.5.0 lib/openstax/aws/distribution.rb
openstax_aws-1.4.0 lib/openstax/aws/distribution.rb