class DeisClient

Constants

REQUEST_TIMEOUT
VERIFY_SSL

Attributes

user_token[R]

Public Class Methods

new(controller_uri, username, password, mock=false) click to toggle source
# File lib/deis_client.rb, line 13
def initialize(controller_uri, username, password, mock=false)
  @mock = mock
  raise DeisError.new("No username or password detected!") if username.nil? || password.nil?
  raise DeisError.new("You must specify a URI for Deis controller!") unless controller_uri =~ /\A#{URI::regexp}\z/
  @deis_controller = controller_uri
  login(username, password)
  self
end

Public Instance Methods

app_create(app_name) click to toggle source
# File lib/deis_client.rb, line 33
def app_create(app_name)
  if @mock
    {}
  else
    payload = app_name.nil? ? Hash.new : {"id" => app_name}
    response = RestClient::Request.execute(:method => :post, :url => apps_url, :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    JSON.parse response.body
  end
end
app_destroy(app_name) click to toggle source
# File lib/deis_client.rb, line 43
def app_destroy(app_name)
  raise DeisError.new("App name is required") if app_name.nil?
  if @mock
    {}
  else
    response = RestClient::Request.execute(:method => :delete, :url => app_url(app_name), :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    response.code == 204
  end
end
app_restart(app_name) click to toggle source
# File lib/deis_client.rb, line 67
def app_restart(app_name)
  raise DeisError.new("App name is required") if app_name.nil?
  if @mock
    false
  else
    response = RestClient::Request.execute(:method => :post, :url => app_restart_url(app_name), :payload => {}.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    response.code == 200
  end
end
app_scale(app_name, process_type, process_count) click to toggle source
# File lib/deis_client.rb, line 53
def app_scale(app_name, process_type, process_count)
  raise DeisError.new("App name is required") if app_name.nil?
  raise DeisError.new("Process type is required. Supported values are 'web' or 'worker'") unless ["web", "worker"].include? process_type
  raise DeisError.new("Process count is required") unless process_count.is_a? Fixnum
  raise DeisError.new("Process count cannnot be negative") if process_count < 0
  if @mock
    false
  else
    payload = {process_type => process_count}
    response = RestClient::Request.execute(:method => :post, :url => scale_url(app_name), :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    response.code == 204
  end
end
cert_add(common_name, certificate, private_key) click to toggle source
# File lib/deis_client.rb, line 90
def cert_add(common_name, certificate, private_key)
  raise DeisError.new("Common name is required") if common_name.nil?
  raise DeisError.new("Certificate name is required") if certificate.nil?
  raise DeisError.new("Private key is required") if private_key.nil?
  if @mock
    {}
  else
    payload = {"common_name" => common_name, "certificate" => certificate, "key" => private_key}
    response = RestClient::Request.execute(:method => :post, :url => certs_url, :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    JSON.parse response.body
  end
end
cert_remove(common_name) click to toggle source
# File lib/deis_client.rb, line 103
def cert_remove(common_name)
  raise DeisError.new("Common name is required") if common_name.nil?
  if @mock
    {}
  else
    url = "#{certs_url}#{common_name}"
    response = RestClient::Request.execute(:method => :delete, :url => url, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    response.code == 204
  end
end
command_run(app_name, command, timeout_in_seconds=REQUEST_TIMEOUT) click to toggle source
# File lib/deis_client.rb, line 169
def command_run(app_name, command, timeout_in_seconds=REQUEST_TIMEOUT)
  raise DeisError.new("App name is required") if app_name.nil?
  raise DeisError.new("Command string is required") if command.nil?
  if @mock
    {}
  else
    payload = {"command" => command}
    response = RestClient::Request.execute(:method => :post, :url => command_run_url(app_name), :payload => payload.to_json, :timeout => timeout_in_seconds, :verify_ssl => VERIFY_SSL, :headers => headers)
    JSON.parse response.body
  end
end
config_get(app_name) click to toggle source
# File lib/deis_client.rb, line 149
def config_get(app_name)
  raise DeisError.new("App name is required") if app_name.nil?
  if @mock
    {}
  else
    response = RestClient::Request.execute(:method => :get, :url => config_url(app_name), :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    hash = JSON.parse response.body
    hash["values"]
  end
end
config_set(app_name, config_hash={}) click to toggle source
# File lib/deis_client.rb, line 138
def config_set(app_name, config_hash={})
  raise DeisError.new("App name is required") if app_name.nil?
  if @mock || config_hash.empty?
    {}
  else
    payload = {"values" => config_hash}
    response = RestClient::Request.execute(:method => :post, :url => config_url(app_name), :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    JSON.parse response.body
  end
end
domain_add(app_name, domain_name) click to toggle source
# File lib/deis_client.rb, line 114
def domain_add(app_name, domain_name)
  raise DeisError.new("App name is required") if app_name.nil?
  raise DeisError.new("Domain name is required") if domain_name.nil?
  if @mock
    {}
  else
    payload = {"domain" => domain_name}
    response = RestClient::Request.execute(:method => :post, :url => domains_url(app_name), :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    JSON.parse response.body
  end
end
domain_remove(app_name, domain_name) click to toggle source
# File lib/deis_client.rb, line 126
def domain_remove(app_name, domain_name)
  raise DeisError.new("App name is required") if app_name.nil?
  raise DeisError.new("Domain name is required") if domain_name.nil?
  if @mock
    {}
  else
    url = "#{domains_url(app_name)}#{domain_name}"
    response = RestClient::Request.execute(:method => :delete, :url => url, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    response.code == 204
  end
end
key_add(user_name, ssh_public_key) click to toggle source
# File lib/deis_client.rb, line 78
def key_add(user_name, ssh_public_key)
  raise DeisError.new("Username is required") if user_name.nil?
  raise DeisError.new("SSH key is required") if ssh_public_key.nil?
  if @mock
    {}
  else
    payload = {"id" => user_name, "public" => ssh_public_key}
    response = RestClient::Request.execute(:method => :post, :url => keys_url, :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
    JSON.parse response.body
  end
end
login(username, password) click to toggle source
# File lib/deis_client.rb, line 22
def login(username, password)
  if @mock
    @user_token = "ABC123"
  else
    payload = {"username" => username, "password" => password}
    response = RestClient::Request.execute(:method => :post, :url => login_url, :payload => payload.to_json, :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => {:content_type => :json, :accept => :json})
    body = JSON.parse response.body
    @user_token = body.fetch('token')
  end
end
logs_get(app_name) click to toggle source
# File lib/deis_client.rb, line 160
def logs_get(app_name)
  raise DeisError.new("App name is required") if app_name.nil?
  if @mock
    {}
  else
    RestClient::Request.execute(:method => :get, :url => log_url(app_name), :timeout => REQUEST_TIMEOUT, :verify_ssl => VERIFY_SSL, :headers => headers)
  end
end

Private Instance Methods

app_restart_url(app_name) click to toggle source
# File lib/deis_client.rb, line 199
def app_restart_url(app_name)
  "#{app_url(app_name)}containers/restart/"
end
app_url(app_name) click to toggle source
# File lib/deis_client.rb, line 195
def app_url(app_name)
  "#{apps_url}#{app_name}/"
end
apps_url() click to toggle source
# File lib/deis_client.rb, line 187
def apps_url
  "#{@deis_controller}/v1/apps/"
end
certs_url() click to toggle source
# File lib/deis_client.rb, line 219
def certs_url
  "#{@deis_controller}/v1/certs/"
end
command_run_url(app_name) click to toggle source
# File lib/deis_client.rb, line 215
def command_run_url(app_name)
  "#{app_url(app_name)}run/"
end
config_url(app_name) click to toggle source
# File lib/deis_client.rb, line 203
def config_url(app_name)
  "#{app_url(app_name)}config/"
end
domains_url(app_name) click to toggle source
# File lib/deis_client.rb, line 191
def domains_url(app_name)
  "#{app_url(app_name)}domains/"
end
headers() click to toggle source
# File lib/deis_client.rb, line 227
def headers
  {:Authorization => "token #{@user_token}", :content_type => :json, :accept => :json}
end
keys_url() click to toggle source
# File lib/deis_client.rb, line 223
def keys_url
  "#{@deis_controller}/v1/keys/"
end
log_url(app_name) click to toggle source
# File lib/deis_client.rb, line 211
def log_url(app_name)
  "#{app_url(app_name)}logs/"
end
login_url() click to toggle source
# File lib/deis_client.rb, line 183
def login_url
  "#{@deis_controller}/v1/auth/login/"
end
scale_url(app_name) click to toggle source
# File lib/deis_client.rb, line 207
def scale_url(app_name)
  "#{app_url(app_name)}scale/"
end