=begin
#CLOUD API

#An enterprise-grade Infrastructure is provided as a Service (IaaS) solution that can be managed through a browser-based \"Data Center Designer\" (DCD) tool or via an easy to use API.   The API allows you to perform a variety of management tasks such as spinning up additional servers, adding volumes, adjusting networking, and so forth. It is designed to allow users to leverage the same power and flexibility found within the DCD visual tool. Both tools are consistent with their concepts and lend well to making the experience smooth and intuitive.

The version of the OpenAPI document: 5.0

Generated by: https://openapi-generator.tech
OpenAPI Generator version: 5.0.1-SNAPSHOT

=end

require 'cgi'

module Ionoscloud
  class LoadBalancerApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end
    # Detach a nic from loadbalancer
    # This will remove a nic from Load Balancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param nic_id [String] The unique ID of the NIC
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth=0: only direct properties are included. Children (servers etc.) are not included  - depth=1: direct properties and children references are included  - depth=2: direct properties and children properties are included  - depth=3: direct properties and children properties and children's children are included  - depth=... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Object]
    def datacenters_loadbalancers_balancednics_delete(datacenter_id, loadbalancer_id, nic_id, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_balancednics_delete_with_http_info(datacenter_id, loadbalancer_id, nic_id, opts)
      data
    end

    # Detach a nic from loadbalancer
    # This will remove a nic from Load Balancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param nic_id [String] The unique ID of the NIC
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth=0: only direct properties are included. Children (servers etc.) are not included  - depth=1: direct properties and children references are included  - depth=2: direct properties and children properties are included  - depth=3: direct properties and children properties and children's children are included  - depth=... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Object, Integer, Hash)>] Object data, response status code and response headers
    def datacenters_loadbalancers_balancednics_delete_with_http_info(datacenter_id, loadbalancer_id, nic_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_balancednics_delete ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_delete"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_delete"
      end
      # verify the required parameter 'nic_id' is set
      if @api_client.config.client_side_validation && nic_id.nil?
        fail ArgumentError, "Missing the required parameter 'nic_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_delete"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_delete, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_delete, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}/balancednics/{nicId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s)).sub('{' + 'nicId' + '}', CGI.escape(nic_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Object'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_balancednics_delete",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_balancednics_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve a nic attached to Load Balancer
    # This will retrieve the properties of an attached nic.
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param nic_id [String] The unique ID of the NIC
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Nic]
    def datacenters_loadbalancers_balancednics_find_by_nic_id(datacenter_id, loadbalancer_id, nic_id, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_balancednics_find_by_nic_id_with_http_info(datacenter_id, loadbalancer_id, nic_id, opts)
      data
    end

    # Retrieve a nic attached to Load Balancer
    # This will retrieve the properties of an attached nic.
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param nic_id [String] The unique ID of the NIC
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Nic, Integer, Hash)>] Nic data, response status code and response headers
    def datacenters_loadbalancers_balancednics_find_by_nic_id_with_http_info(datacenter_id, loadbalancer_id, nic_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id"
      end
      # verify the required parameter 'nic_id' is set
      if @api_client.config.client_side_validation && nic_id.nil?
        fail ArgumentError, "Missing the required parameter 'nic_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}/balancednics/{nicId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s)).sub('{' + 'nicId' + '}', CGI.escape(nic_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Nic'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_balancednics_find_by_nic_id",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_balancednics_find_by_nic_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List Load Balancer Members 
    # You can retrieve a list of nics attached to a Load Balancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @option opts [Integer] :offset the first element (of the total list of elements) to include in the response (use together with &lt;code&gt;limit&lt;/code&gt; for pagination) (default to 0)
    # @option opts [Integer] :limit the maximum number of elements to return (use together with &lt;code&gt;offset&lt;/code&gt; for pagination) (default to 1000)
    # @return [BalancedNics]
    def datacenters_loadbalancers_balancednics_get(datacenter_id, loadbalancer_id, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_balancednics_get_with_http_info(datacenter_id, loadbalancer_id, opts)
      data
    end

    # List Load Balancer Members 
    # You can retrieve a list of nics attached to a Load Balancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @option opts [Integer] :offset the first element (of the total list of elements) to include in the response (use together with &lt;code&gt;limit&lt;/code&gt; for pagination)
    # @option opts [Integer] :limit the maximum number of elements to return (use together with &lt;code&gt;offset&lt;/code&gt; for pagination)
    # @return [Array<(BalancedNics, Integer, Hash)>] BalancedNics data, response status code and response headers
    def datacenters_loadbalancers_balancednics_get_with_http_info(datacenter_id, loadbalancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_balancednics_get ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get, must be greater than or equal to 0.'
      end

      if @api_client.config.client_side_validation && !opts[:'offset'].nil? && opts[:'offset'] < 0
        fail ArgumentError, 'invalid value for "opts[:"offset"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get, must be greater than or equal to 0.'
      end

      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 10000
        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get, must be smaller than or equal to 10000.'
      end

      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_get, must be greater than or equal to 1.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}/balancednics'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?
      query_params[:'offset'] = opts[:'offset'] if !opts[:'offset'].nil?
      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'BalancedNics'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_balancednics_get",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_balancednics_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Attach a nic to Load Balancer
    # This will attach a pre-existing nic to a Load Balancer. 
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param nic [Nic] Nic id to be attached
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Nic]
    def datacenters_loadbalancers_balancednics_post(datacenter_id, loadbalancer_id, nic, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_balancednics_post_with_http_info(datacenter_id, loadbalancer_id, nic, opts)
      data
    end

    # Attach a nic to Load Balancer
    # This will attach a pre-existing nic to a Load Balancer. 
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param nic [Nic] Nic id to be attached
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Nic, Integer, Hash)>] Nic data, response status code and response headers
    def datacenters_loadbalancers_balancednics_post_with_http_info(datacenter_id, loadbalancer_id, nic, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_balancednics_post ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_post"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_post"
      end
      # verify the required parameter 'nic' is set
      if @api_client.config.client_side_validation && nic.nil?
        fail ArgumentError, "Missing the required parameter 'nic' when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_post"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_post, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_balancednics_post, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}/balancednics'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(nic)

      # return_type
      return_type = opts[:debug_return_type] || 'Nic'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_balancednics_post",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_balancednics_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Delete a Loadbalancer.
    # Removes the specific Loadbalancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Object]
    def datacenters_loadbalancers_delete(datacenter_id, loadbalancer_id, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_delete_with_http_info(datacenter_id, loadbalancer_id, opts)
      data
    end

    # Delete a Loadbalancer.
    # Removes the specific Loadbalancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Object, Integer, Hash)>] Object data, response status code and response headers
    def datacenters_loadbalancers_delete_with_http_info(datacenter_id, loadbalancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_delete ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_delete"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_delete"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_delete, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_delete, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Object'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_delete",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve a loadbalancer
    # Retrieves the attributes of a given Loadbalancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Loadbalancer]
    def datacenters_loadbalancers_find_by_id(datacenter_id, loadbalancer_id, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_find_by_id_with_http_info(datacenter_id, loadbalancer_id, opts)
      data
    end

    # Retrieve a loadbalancer
    # Retrieves the attributes of a given Loadbalancer
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Loadbalancer, Integer, Hash)>] Loadbalancer data, response status code and response headers
    def datacenters_loadbalancers_find_by_id_with_http_info(datacenter_id, loadbalancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_find_by_id ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_find_by_id"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_find_by_id"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_find_by_id, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_find_by_id, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Loadbalancer'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_find_by_id",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_find_by_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List Load Balancers
    # Retrieve a list of Load Balancers within the datacenter
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @option opts [Integer] :offset the first element (of the total list of elements) to include in the response (use together with &lt;code&gt;limit&lt;/code&gt; for pagination) (default to 0)
    # @option opts [Integer] :limit the maximum number of elements to return (use together with &lt;code&gt;offset&lt;/code&gt; for pagination) (default to 1000)
    # @return [Loadbalancers]
    def datacenters_loadbalancers_get(datacenter_id, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_get_with_http_info(datacenter_id, opts)
      data
    end

    # List Load Balancers
    # Retrieve a list of Load Balancers within the datacenter
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @option opts [Integer] :offset the first element (of the total list of elements) to include in the response (use together with &lt;code&gt;limit&lt;/code&gt; for pagination)
    # @option opts [Integer] :limit the maximum number of elements to return (use together with &lt;code&gt;offset&lt;/code&gt; for pagination)
    # @return [Array<(Loadbalancers, Integer, Hash)>] Loadbalancers data, response status code and response headers
    def datacenters_loadbalancers_get_with_http_info(datacenter_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_get ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_get"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_get, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_get, must be greater than or equal to 0.'
      end

      if @api_client.config.client_side_validation && !opts[:'offset'].nil? && opts[:'offset'] < 0
        fail ArgumentError, 'invalid value for "opts[:"offset"]" when calling LoadBalancerApi.datacenters_loadbalancers_get, must be greater than or equal to 0.'
      end

      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 10000
        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling LoadBalancerApi.datacenters_loadbalancers_get, must be smaller than or equal to 10000.'
      end

      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling LoadBalancerApi.datacenters_loadbalancers_get, must be greater than or equal to 1.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?
      query_params[:'offset'] = opts[:'offset'] if !opts[:'offset'].nil?
      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Loadbalancers'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_get",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Partially modify a Loadbalancer
    # You can use update attributes of a resource
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param loadbalancer [LoadbalancerProperties] Modified Loadbalancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Loadbalancer]
    def datacenters_loadbalancers_patch(datacenter_id, loadbalancer_id, loadbalancer, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_patch_with_http_info(datacenter_id, loadbalancer_id, loadbalancer, opts)
      data
    end

    # Partially modify a Loadbalancer
    # You can use update attributes of a resource
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param loadbalancer [LoadbalancerProperties] Modified Loadbalancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Loadbalancer, Integer, Hash)>] Loadbalancer data, response status code and response headers
    def datacenters_loadbalancers_patch_with_http_info(datacenter_id, loadbalancer_id, loadbalancer, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_patch ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_patch"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_patch"
      end
      # verify the required parameter 'loadbalancer' is set
      if @api_client.config.client_side_validation && loadbalancer.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer' when calling LoadBalancerApi.datacenters_loadbalancers_patch"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_patch, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_patch, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(loadbalancer)

      # return_type
      return_type = opts[:debug_return_type] || 'Loadbalancer'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_patch",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create a Load Balancer
    # Creates a Loadbalancer within the datacenter
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer [Loadbalancer] Loadbalancer to be created
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Loadbalancer]
    def datacenters_loadbalancers_post(datacenter_id, loadbalancer, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_post_with_http_info(datacenter_id, loadbalancer, opts)
      data
    end

    # Create a Load Balancer
    # Creates a Loadbalancer within the datacenter
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer [Loadbalancer] Loadbalancer to be created
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Loadbalancer, Integer, Hash)>] Loadbalancer data, response status code and response headers
    def datacenters_loadbalancers_post_with_http_info(datacenter_id, loadbalancer, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_post ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_post"
      end
      # verify the required parameter 'loadbalancer' is set
      if @api_client.config.client_side_validation && loadbalancer.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer' when calling LoadBalancerApi.datacenters_loadbalancers_post"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_post, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_post, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(loadbalancer)

      # return_type
      return_type = opts[:debug_return_type] || 'Loadbalancer'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_post",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Modify a Load Balancer
    # You can use update attributes of a resource
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param loadbalancer [Loadbalancer] Modified Loadbalancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines) (default to true)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Loadbalancer]
    def datacenters_loadbalancers_put(datacenter_id, loadbalancer_id, loadbalancer, opts = {})
      data, _status_code, _headers = datacenters_loadbalancers_put_with_http_info(datacenter_id, loadbalancer_id, loadbalancer, opts)
      data
    end

    # Modify a Load Balancer
    # You can use update attributes of a resource
    # @param datacenter_id [String] The unique ID of the datacenter
    # @param loadbalancer_id [String] The unique ID of the Load Balancer
    # @param loadbalancer [Loadbalancer] Modified Loadbalancer
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether response is pretty-printed (with indentation and new lines)
    # @option opts [Integer] :depth Controls the details depth of response objects.  Eg. GET /datacenters/[ID]  - depth&#x3D;0: only direct properties are included. Children (servers etc.) are not included  - depth&#x3D;1: direct properties and children references are included  - depth&#x3D;2: direct properties and children properties are included  - depth&#x3D;3: direct properties and children properties and children&#39;s children are included  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users having more than 1 contract need to provide contract number, against which all API requests should be executed
    # @return [Array<(Loadbalancer, Integer, Hash)>] Loadbalancer data, response status code and response headers
    def datacenters_loadbalancers_put_with_http_info(datacenter_id, loadbalancer_id, loadbalancer, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: LoadBalancerApi.datacenters_loadbalancers_put ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling LoadBalancerApi.datacenters_loadbalancers_put"
      end
      # verify the required parameter 'loadbalancer_id' is set
      if @api_client.config.client_side_validation && loadbalancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer_id' when calling LoadBalancerApi.datacenters_loadbalancers_put"
      end
      # verify the required parameter 'loadbalancer' is set
      if @api_client.config.client_side_validation && loadbalancer.nil?
        fail ArgumentError, "Missing the required parameter 'loadbalancer' when calling LoadBalancerApi.datacenters_loadbalancers_put"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_put, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling LoadBalancerApi.datacenters_loadbalancers_put, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/loadbalancers/{loadbalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'loadbalancerId' + '}', CGI.escape(loadbalancer_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(loadbalancer)

      # return_type
      return_type = opts[:debug_return_type] || 'Loadbalancer'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"LoadBalancerApi.datacenters_loadbalancers_put",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: LoadBalancerApi#datacenters_loadbalancers_put\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end