diff --git a/app/controllers/services/managed_service_instances_controller.rb b/app/controllers/services/managed_service_instances_controller.rb index 1857fafc72b..02f95d1faa8 100644 --- a/app/controllers/services/managed_service_instances_controller.rb +++ b/app/controllers/services/managed_service_instances_controller.rb @@ -1,5 +1,3 @@ -require 'vcap/services/api' - module VCAP::CloudController class ManagedServiceInstancesController < RestController::ModelController allow_unauthenticated_access diff --git a/app/controllers/services/service_bindings_controller.rb b/app/controllers/services/service_bindings_controller.rb index 9c831db9036..e0d29fc9c95 100644 --- a/app/controllers/services/service_bindings_controller.rb +++ b/app/controllers/services/service_bindings_controller.rb @@ -1,4 +1,3 @@ -require 'vcap/services/api' require 'controllers/services/lifecycle/service_instance_binding_manager' require 'models/helpers/process_types' require 'actions/v2/services/service_binding_read' diff --git a/app/controllers/services/service_instances_controller.rb b/app/controllers/services/service_instances_controller.rb index 8138a508909..e77b9346c58 100644 --- a/app/controllers/services/service_instances_controller.rb +++ b/app/controllers/services/service_instances_controller.rb @@ -1,4 +1,3 @@ -require 'vcap/services/api' require 'jobs/audit_event_job' require 'actions/services/service_instance_create' require 'actions/services/service_instance_update' diff --git a/app/controllers/services/service_keys_controller.rb b/app/controllers/services/service_keys_controller.rb index 5d073d52cd2..d71b6ac1576 100644 --- a/app/controllers/services/service_keys_controller.rb +++ b/app/controllers/services/service_keys_controller.rb @@ -1,5 +1,3 @@ -require 'vcap/services/api' - module VCAP::CloudController class ServiceKeysController < RestController::ModelController define_attributes do diff --git a/app/controllers/services/service_usage_events_controller.rb b/app/controllers/services/service_usage_events_controller.rb index fa7ea84d24d..a0c851fafd4 100644 --- a/app/controllers/services/service_usage_events_controller.rb +++ b/app/controllers/services/service_usage_events_controller.rb @@ -1,5 +1,3 @@ -require 'vcap/services/api' - module VCAP::CloudController class ServiceUsageEventsController < RestController::ModelController query_parameters :service_instance_type, :service_guid diff --git a/app/models/services/managed_service_instance.rb b/app/models/services/managed_service_instance.rb index 2fe0f175778..4a01fa11998 100644 --- a/app/models/services/managed_service_instance.rb +++ b/app/models/services/managed_service_instance.rb @@ -95,10 +95,6 @@ def gateway_data val end - def requester - VCAP::Services::Api::SynchronousHttpRequest - end - delegate :service, to: :service_plan delegate :service_broker, to: :service_plan diff --git a/lib/vcap/services/api.rb b/lib/vcap/services/api.rb deleted file mode 100644 index e0a3479636e..00000000000 --- a/lib/vcap/services/api.rb +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -require 'vcap/services/api/async_requests' -require 'vcap/services/api/const' -require 'vcap/services/api/messages' -require 'vcap/services/api/clients/service_gateway_client' -require 'vcap/services/api/util' diff --git a/lib/vcap/services/api/async_requests.rb b/lib/vcap/services/api/async_requests.rb deleted file mode 100644 index b867bf75d75..00000000000 --- a/lib/vcap/services/api/async_requests.rb +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -require 'httpclient' - -require 'vcap/services/api/const' - -module VCAP - module Services - module Api - end - end -end - -module VCAP::Services::Api - module SynchronousHttpRequest - def self.request(url, token, verb, _timeout, msg=VCAP::Services::Api::EMPTY_REQUEST) - header = { - VCAP::Services::Api::GATEWAY_TOKEN_HEADER => token, - 'Content-Type' => 'application/json' - } - body = msg.encode - client = HTTPClient.new - msg = client.request(verb.to_sym, url, body:, header:) - [msg.code, msg.body] - end - end -end diff --git a/lib/vcap/services/api/clients/service_gateway_client.rb b/lib/vcap/services/api/clients/service_gateway_client.rb deleted file mode 100644 index d2e3707fe63..00000000000 --- a/lib/vcap/services/api/clients/service_gateway_client.rb +++ /dev/null @@ -1,197 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -require 'net/http' -require 'uri' - -require 'vcap/services/api/const' -require 'vcap/services/api/messages' -require 'vcap/services/api/async_requests' - -module VCAP - module Services - module Api - end - end -end - -module VCAP::Services::Api - class ServiceGatewayClient - # Public: Indicate gateway client encounter an unexpected error, - # such as can't connect to gateway or can't decode response. - # - class UnexpectedResponse < StandardError; end - - # Public: Indicate an error response from gateway - # - class ErrorResponse < StandardError - attr_reader :status, :error - - # status - the http status - # error - a ServiceErrorResponse object - # - def initialize(status, error) - @status = status - @error = error - end - - def to_s - "#{self.class.name}: #{error.description}" - end - - def to_h - { - 'error' => error.extract(stringify_keys: true).merge( - 'backtrace' => backtrace, - 'types' => self.class.ancestors.map(&:name) - Exception.ancestors.map(&:name) - ) - } - end - end - - class NotFoundResponse < ErrorResponse - def initialize(error) - super(404, error) - end - end - - class GatewayInternalResponse < ErrorResponse - def initialize(error) - super(503, error) - end - end - - attr_reader :http_client - - def initialize(url, token, timeout, request_id) - @http_client = HttpClient.new(url, token, timeout, request_id) - end - - def provision(args) - msg = GatewayProvisionRequest.new(args) - resp = http_client.perform_request(:post, '/gateway/v1/configurations', msg) - GatewayHandleResponse.decode(resp) - end - - def unprovision(args) - http_client.perform_request(:delete, "/gateway/v1/configurations/#{args[:service_id]}") - EMPTY_REQUEST - end - - def bind(args) - msg = GatewayBindRequest.new(args) - resp = http_client.perform_request(:post, "/gateway/v1/configurations/#{msg.service_id}/handles", msg) - GatewayHandleResponse.decode(resp) - end - - def unbind(args) - msg = GatewayUnbindRequest.new(args) - http_client.perform_request(:delete, "/gateway/v1/configurations/#{msg.service_id}/handles/#{msg.handle_id}", msg) - EMPTY_REQUEST - end - - #------------------ - # Snapshotting has never been enabled in production - we can probably remove these - #------------------ - - def job_info(args) - resp = http_client.perform_request(:get, "/gateway/v1/configurations/#{args[:service_id]}/jobs/#{args[:job_id]}") - Job.decode(resp) - end - - def create_snapshot(args) - resp = http_client.perform_request(:post, "/gateway/v1/configurations/#{args[:service_id]}/snapshots") - Job.decode(resp) - end - - def enum_snapshots(args) - resp = http_client.perform_request(:get, "/gateway/v1/configurations/#{args[:service_id]}/snapshots") - SnapshotList.decode(resp) - end - - def snapshot_details(args) - resp = http_client.perform_request(:get, "/gateway/v1/configurations/#{args[:service_id]}/snapshots/#{args[:snapshot_id]}") - Snapshot.decode(resp) - end - - def update_snapshot_name(args) - http_client.perform_request(:post, "/gateway/v1/configurations/#{args[:service_id]}/snapshots/#{args[:snapshot_id]}/name", args[:msg]) - EMPTY_REQUEST - end - - def rollback_snapshot(args) - resp = http_client.perform_request(:put, "/gateway/v1/configurations/#{args[:service_id]}/snapshots/#{args[:snapshot_id]}") - Job.decode(resp) - end - - def delete_snapshot(args) - resp = http_client.perform_request(:delete, "/gateway/v1/configurations/#{args[:service_id]}/snapshots/#{args[:snapshot_id]}") - Job.decode(resp) - end - - def create_serialized_url(args) - resp = http_client.perform_request(:post, "/gateway/v1/configurations/#{args[:service_id]}/serialized/url/snapshots/#{args[:snapshot_id]}") - Job.decode(resp) - end - - def serialized_url(args) - resp = http_client.perform_request(:get, "/gateway/v1/configurations/#{args[:service_id]}/serialized/url/snapshots/#{args[:snapshot_id]}") - SerializedURL.decode(resp) - end - - def import_from_url(args) - resp = http_client.perform_request(:put, "/gateway/v1/configurations/#{args[:service_id]}/serialized/url", args[:msg]) - Job.decode(resp) - end - - class HttpClient - METHODS_MAP = { - get: Net::HTTP::Get, - post: Net::HTTP::Post, - put: Net::HTTP::Put, - delete: Net::HTTP::Delete - }.freeze - - attr_reader :uri, :timeout, :token, :headers - - def initialize(uri, token, timeout, request_id) - @uri = URI.parse(uri) - @timeout = timeout - @token = token - @headers = { - 'Content-Type' => 'application/json', - GATEWAY_TOKEN_HEADER => token, - 'X-VCAP-Request-ID' => request_id.to_s - } - end - - def perform_request(http_method, path, msg=EMPTY_REQUEST) - klass = METHODS_MAP[http_method] - request = klass.new(path, headers) - request.body = msg.encode - - opts = {} - opts[:use_ssl] = true if uri.scheme == 'https' - - response = Net::HTTP.start(uri.host, uri.port, opts) do |http| - http.request(request) - end - - code = response.code.to_i - body = response.body - - return body if code == 200 - - begin - err = ServiceErrorResponse.decode(body) - rescue JsonMessage::Error - raise UnexpectedResponse.new("Can't decode gateway response. status code: #{code}, response body: #{body}") - end - - case code - when 404 then raise NotFoundResponse.new(err) - when 503 then raise GatewayInternalResponse.new(err) - else raise ErrorResponse.new(code, err) - end - end - end - end -end diff --git a/lib/vcap/services/api/const.rb b/lib/vcap/services/api/const.rb deleted file mode 100644 index 6f3457524bd..00000000000 --- a/lib/vcap/services/api/const.rb +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -module VCAP - module Services - module Api - GATEWAY_TOKEN_HEADER = 'X-VCAP-Service-Token'.freeze - SERVICE_LABEL_REGEX = /^\S+-\S+$/ - end - end -end diff --git a/lib/vcap/services/api/messages.rb b/lib/vcap/services/api/messages.rb deleted file mode 100644 index 33e5197a275..00000000000 --- a/lib/vcap/services/api/messages.rb +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -require 'uri' - -require 'vcap/services/api/const' -require 'membrane' -require 'vcap/json_message' - -module VCAP - module Services - module Api - class EmptyRequest < JsonMessage - end - EMPTY_REQUEST = EmptyRequest.new.freeze - - # - # Tell the CloudController about a service - # NB: Deleting an offering takes all args in the url - # - class ServiceOfferingRequest < JsonMessage - required :label, SERVICE_LABEL_REGEX - required :url, URI::DEFAULT_PARSER.make_regexp(%w[http https]) - required :supported_versions, [String] - required :version_aliases, Hash - - optional :description, String - optional :info_url, URI::DEFAULT_PARSER.make_regexp(%w[http https]) - optional :tags, [String] - optional :plan_details do - [ - { - 'name' => String, - 'free' => bool, - optional('description') => String, - optional('extra') => String, - optional('unique_id') => String - } - ] - end - optional :plans, [String] - optional :plan_descriptions - optional :cf_plan_id - optional :plan_options - optional :binding_options - optional :acls - optional :active - optional :timeout, Integer - optional :provider, String - optional :default_plan, String - optional :extra, String - optional :unique_id, String - end - - class ProxiedServiceOfferingRequest < JsonMessage - required :label, SERVICE_LABEL_REGEX - required :options, [{ 'name' => String, 'credentials' => Hash }] - optional :description, String - end - - class HandleUpdateRequest < JsonMessage - required :service_id, String - required :configuration - required :credentials - end - - class HandleUpdateRequestV2 < JsonMessage - required :token, String - required :gateway_data - required :credentials - end - - class ListHandlesResponse < JsonMessage - required :handles, [Object] - end - - class ListProxiedServicesResponse < JsonMessage - required :proxied_services, [{ 'label' => String, 'description' => String, 'acls' => { 'users' => [String], 'wildcards' => [String] } }] - end - - # - # Provision a service instance - # NB: Unprovision takes all args in the url - # - class CloudControllerProvisionRequest < JsonMessage - required :label, SERVICE_LABEL_REGEX - required :name, String - required :plan, String - required :version, String - - optional :plan_option - optional :provider, String - end - - class GatewayProvisionRequest < JsonMessage - required :unique_id, String - required :name, String - - optional :email, String - optional :provider, String - optional :label, String - optional :plan, String - optional :version, String - optional :organization_guid, String - optional :space_guid, String - optional :plan_option - end - - # Provision and bind response use the same format - class GatewayHandleResponse < JsonMessage - required :service_id, String - required :configuration - required :credentials - - optional :dashboard_url, String - optional :syslog_drain_url, String - end - - # - # Bind a previously provisioned service to an app - # - class CloudControllerBindRequest < JsonMessage - required :service_id, String - required :app_id, Integer - required :binding_options - end - - class GatewayBindRequest < JsonMessage - required :service_id, String - required :label, String - required :email, String - required :binding_options - - optional :app_id, String - end - - class GatewayUnbindRequest < JsonMessage - required :service_id, String - required :handle_id, String - required :binding_options - end - - class CloudControllerBindResponse < JsonMessage - required :label, SERVICE_LABEL_REGEX - required :binding_token, String - end - - # Bind app_name using binding_token - class BindExternalRequest < JsonMessage - required :binding_token, String - required :app_id, Integer - end - - class BindingTokenRequest < JsonMessage - required :service_id, String - required :binding_options - end - - class Snapshot < JsonMessage - required :snapshot_id, String - required :date, String - required :size, Integer - required :name, String - end - - class SnapshotList < JsonMessage - required :snapshots, [Object] - end - - class CreateSnapshotV2Request < JsonMessage - required :name, /./ - end - - class SnapshotV2 < JsonMessage - required :snapshot_id, String - required :name, String - required :state, String - required :size, Integer - - optional :created_time, String - optional :restored_time, String - end - - class SnapshotListV2 < JsonMessage - required :snapshots, [Object] - end - - class UpdateSnapshotNameRequest < JsonMessage - required :name, String - end - - class Job < JsonMessage - required :job_id, String - required :status, String - required :start_time, String - optional :description, String - optional :complete_time, String - optional :result, Object - end - - class SerializedURL < JsonMessage - required :url, URI::DEFAULT_PARSER.make_regexp(%w[http https]) - end - - class SerializedData < JsonMessage - required :data, String - end - - class ServiceErrorResponse < JsonMessage - required :code, Integer - required :description, String - optional :error, Hash - end - end - end -end diff --git a/lib/vcap/services/api/util.rb b/lib/vcap/services/api/util.rb deleted file mode 100644 index 3a3826cd062..00000000000 --- a/lib/vcap/services/api/util.rb +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2009-2011 VMware, Inc. -module VCAP - module Services - module Api - end - end -end - -class VCAP::Services::Api::Util - class << self - def parse_label(label) - raise ArgumentError.new('Invalid label') unless label.match?(/-/) - - name, _, version = label.rpartition('-') - [name, version] - end - end -end