Sha256: 1a99fc9adb9ec9bd517115267f30af3a4a1d3c7cad20b192d4ce6564c7580910

Contents?: true

Size: 1.47 KB

Versions: 1

Compression:

Stored size: 1.47 KB

Contents

require_relative 'resource'

module OpsWorks
  class Deployment < Resource
    attr_accessor :id, :status, :created_at

    POLL_INTERVAL = 5

    # rubocop:disable MethodLength
    def self.wait(deployments)
      while deployments.any?(&:running?)
        sleep POLL_INTERVAL
        response = client.describe_deployments(
          deployment_ids: deployments.map(&:id)
        )
        updates = from_collection_response(response)
        deployments.each do |deployment|
          update = updates.find { |u| u.id == deployment.id }
          deployment.status = update.status
        end
      end
    end
    # rubocop:enble MethodLength

    def self.from_collection_response(response)
      response.data[:deployments].map do |hash|
        new(
          id: hash[:deployment_id],
          created_at: hash[:created_at],
          status: hash[:status]
        )
      end
    end

    def self.from_response(response)
      new(id: response[:deployment_id])
    end

    def wait
      while deployment.running?
        sleep POLL_INTERVAL
        response = client.describe_deployments(deployment_ids: [id])
        update = from_collection_response(response).first
        deployment.status = update.status
      end
    end

    def running?
      status.nil? || status == 'running'
    end

    def success?
      status == 'successful'
    end

    def failed?
      status == 'failed'
    end

    def created_at
      Time.parse(@created_at)
    rescue
      @created_at
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
opsworks-cli-0.2.0 lib/opsworks/deployment.rb