class Bosh::Cpi::RegistryClient
Attributes
endpoint[R]
password[R]
user[R]
Public Class Methods
new(endpoint, user, password)
click to toggle source
# File lib/bosh/cpi/registry_client.rb, line 12 def initialize(endpoint, user, password) @endpoint = endpoint unless @endpoint =~ /^http:\/\// @endpoint = "http://#{@endpoint}" end @user = user @password = password auth = Base64.encode64("#{@user}:#{@password}").gsub("\n", '') @headers = { "Accept" => 'application/json', "Authorization" => "Basic #{auth}" } @client = HTTPClient.new end
Public Instance Methods
delete_settings(instance_id)
click to toggle source
Delete instance settings from the registry @param [String] instance_id EC2 instance id @return [Boolean]
# File lib/bosh/cpi/registry_client.rb, line 89 def delete_settings(instance_id) url = "#{@endpoint}/instances/#{instance_id}/settings" response = @client.delete(url, {:header => @headers}) unless [200, 404].include? response.status cloud_error("Cannot delete settings for '#{instance_id}', got HTTP #{response.status}") end true end
read_settings(instance_id)
click to toggle source
Read instance settings from the registry @param [String] instance_id EC2 instance id @return [Hash] Agent settings
# File lib/bosh/cpi/registry_client.rb, line 59 def read_settings(instance_id) url = "#{@endpoint}/instances/#{instance_id}/settings" response = @client.get(url, {:header => @headers}) if response.status != 200 cloud_error("Cannot read settings for '#{instance_id}', got HTTP #{response.status}") end body = JSON.load(response.body) unless body.is_a?(Hash) cloud_error("Invalid registry response, Hash expected, got #{body.class}: #{body}") end settings = JSON.load(body["settings"]) unless settings.is_a?(Hash) cloud_error("Invalid settings format, Hash expected, got #{settings.class}: #{settings}") end settings rescue JSON::ParserError => e cloud_error("Cannot parse settings for '#{instance_id}': #{e.message}") end
update_settings(instance_id, settings)
click to toggle source
Update instance settings in the registry @param [String] instance_id EC2 instance id @param [Hash] settings New agent settings @return [Boolean]
# File lib/bosh/cpi/registry_client.rb, line 37 def update_settings(instance_id, settings) unless settings.is_a?(Hash) raise ArgumentError, "Invalid settings format, Hash expected, #{settings.class} given" end payload = JSON.dump(settings) url = "#{@endpoint}/instances/#{instance_id}/settings" put_headers = @headers.merge('Content-Type' => 'application/json') response = @client.put(url, {:body => payload, :header => put_headers}) unless HTTP::Status.successful?(response.status) cloud_error("Cannot update settings for '#{instance_id}', got HTTP #{response.status}") end true end
Private Instance Methods
cloud_error(message)
click to toggle source
# File lib/bosh/cpi/registry_client.rb, line 103 def cloud_error(message) raise Bosh::Clouds::CloudError, message end