Sha256: 3d70a797b41dffd94197f733ecc8d2180802c6fc326cf2c9d67ae833b86b2234

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

require_relative 'common'

module Kontena::Cli::Stacks
  class DeployCommand < Kontena::Command
    include Kontena::Cli::Common
    include Kontena::Cli::GridOptions
    include Common

    banner "Deploys all services of a stack that has been installed in a grid on Kontena Master"

    parameter "NAME", "Stack name"

    requires_current_master
    requires_current_master_token

    def execute
      deployment = nil
      spinner "Deploying stack #{pastel.cyan(name)}" do
        deployment = deploy_stack(name)
        deployment['service_deploys'].each do |service_deploy|
          wait_for_deploy_to_finish(service_deploy)
        end
      end
    end

    def deploy_stack(name)
      client.post("stacks/#{current_grid}/#{name}/deploy", {})
    end

    # @param [Hash] deployment
    # @return [Boolean]
    def wait_for_deploy_to_finish(deployment, timeout = 600)
      deployed = false
      Timeout::timeout(timeout) do
        until deployed
          deployment = client.get("services/#{deployment['service_id']}/deploys/#{deployment['id']}")
          deployed = true if deployment['finished_at']
          sleep 1
        end
        if deployment['state'] == 'error'
          raise deployment['reason']
        end
      end

      deployed
    rescue Timeout::Error
      raise 'deploy timed out'
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
kontena-cli-1.0.0 lib/kontena/cli/stacks/deploy_command.rb
kontena-cli-1.0.0.rc2 lib/kontena/cli/stacks/deploy_command.rb
kontena-cli-1.0.0.rc1 lib/kontena/cli/stacks/deploy_command.rb
kontena-cli-1.0.0.pre4 lib/kontena/cli/stacks/deploy_command.rb
kontena-cli-1.0.0.pre3 lib/kontena/cli/stacks/deploy_command.rb