class HiveQueen
Special cases:
-
environment not found
-
environment not ready: fail
Keeps an in-memory history of printed lines (to persist to HQ), and puts to stderr (capistrano's default)
Attributes
endpoint[RW]
logger[RW]
password[RW]
project[RW]
username[RW]
Public Class Methods
commit_status(commit_sha)
click to toggle source
# File lib/capistrano/hivequeen.rb, line 47 def commit_status(commit_sha) get("/projects/#{project}/commit_statuses/#{commit_sha}.json") end
credentials_from_path()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 75 def credentials_from_path # Check that credentials are not accessible to world or group mode = File.stat(credentials_path).mode raise InsecureCredentials unless (mode % 64 == 0) File.read(credentials_path) rescue InsecureCredentials puts "#{credentials_path} is insecure. Please change you password and run" puts "chmod 600 #{credentials_path}" exit 1 rescue Errno::ENOENT, RuntimeError puts "Could not read HiveQueen credentials from #{credentials_path}." puts "#{credentials_path} should contain your username and password seperated by a colon" puts "Run this command with your credentials:" puts " $ echo username:password > #{credentials_path}; chmod 600 #{credentials_path}" exit 1 end
default_roles()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 25 def default_roles @project_data['default_roles'] end
environment_names()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 33 def environment_names environments.map{|e| e['name'].to_sym } end
environments()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 29 def environments project_data['environments'] end
finish_deployment(environment_id, deployment_id)
click to toggle source
# File lib/capistrano/hivequeen.rb, line 59 def finish_deployment(environment_id, deployment_id) state = $! ? 'failed' : 'succeeded' puts "Finishing deployment in Hivequeen. State: #{state}" params = {:deployment => {:state => state}} deploy_log = logger.device.history params[:deployment][:deploy_log] = deploy_log if deploy_log put_or_post('PUT', "/environments/#{environment_id}/deployments/#{deployment_id}.json", params) end
get_credentials!()
click to toggle source
Load credentials from ~/.hivequeen
# File lib/capistrano/hivequeen.rb, line 69 def get_credentials! creds = ENV['HIVEQUEEN_CREDENTIALS'] || credentials_from_path @username, @password = creds.chomp.split(':') raise unless username && password end
project_data()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 21 def project_data @project_data ||= get("/#{project}.json") end
repository()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 37 def repository project_data['repo'] end
roles(env_id)
click to toggle source
# File lib/capistrano/hivequeen.rb, line 41 def roles(env_id) env_id = env_id.to_sym @roles ||= {} @roles[env_id] ||= get("/#{env_id}.json") end
start_deployment(environment_id, params)
click to toggle source
# File lib/capistrano/hivequeen.rb, line 51 def start_deployment(environment_id, params) required_params = [:task, :commit] required_params.each do |key| raise ArgumentError.new("#{key} is a required param") unless params.key?(key) end put_or_post('POST', "/environments/#{environment_id}/deployments.json", :deployment => params) end
Protected Class Methods
auth_header()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 103 def auth_header value = Base64.encode64([username, password] * ':').gsub(/\n/, '') { 'Authorization' => "Basic #{value}" } end
connection()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 99 def connection Excon.new(endpoint) end
credentials_path()
click to toggle source
# File lib/capistrano/hivequeen.rb, line 95 def credentials_path ENV['HIVEQUEEN_CREDENTIALS_PATH'] || File.join(ENV['HOME'], '.hivequeen') end
get(path)
click to toggle source
# File lib/capistrano/hivequeen.rb, line 108 def get(path) url = "#{endpoint}#{path}" logger.trace "Fetching #{url}" response = connection.request(:method => 'GET', :path => path, :headers => auth_header) unless (200..299).include?(response.status) raise "Request to #{url} returned #{response.status} status" end JSON.parse(response.body) end
put_or_post(method, path, data)
click to toggle source
# File lib/capistrano/hivequeen.rb, line 118 def put_or_post(method, path, data) headers = auth_header.merge("Content-type"=>"application/json", "Accept"=>"application/json") response = connection.request(:path => path, :method => method, :headers => headers, :body => data.to_json) case response.status when 204 # Do nothing when (200..299) JSON.parse(response.body) when (400..499) errors = JSON.parse(response.body) raise DeploymentError.new(errors.inspect) else raise "Request to #{path} returned #{response.status} status" end end