=begin
#CLOUD API

#IONOS Enterprise-grade Infrastructure as a Service (IaaS) solutions can be managed through the Cloud API, in addition or as an alternative to the \"Data Center Designer\" (DCD) browser-based tool.    Both methods employ consistent concepts and features, deliver similar power and flexibility, and can be used to perform a multitude of management tasks, including adding servers, volumes, configuring networks, and so on.

The version of the OpenAPI document: 6.0

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

=end

require 'cgi'

module Ionoscloud
  class ApplicationLoadBalancersApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end
    # Delete an Application Load Balancer by ID
    # Removes the specified Application Load Balancer from the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth=0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [nil]
    def datacenters_applicationloadbalancers_delete(datacenter_id, application_load_balancer_id, opts = {})
      datacenters_applicationloadbalancers_delete_with_http_info(datacenter_id, application_load_balancer_id, opts)
      nil
    end

    # Delete an Application Load Balancer by ID
    # Removes the specified Application Load Balancer from the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth=0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
    def datacenters_applicationloadbalancers_delete_with_http_info(datacenter_id, application_load_balancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_delete"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_delete"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_delete, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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]

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get an Application Load Balancer by ID
    # Retrieves the properties of the specified Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancer]
    def datacenters_applicationloadbalancers_find_by_application_load_balancer_id(datacenter_id, application_load_balancer_id, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_find_by_application_load_balancer_id_with_http_info(datacenter_id, application_load_balancer_id, opts)
      data
    end

    # Get an Application Load Balancer by ID
    # Retrieves the properties of the specified Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancer, Integer, Hash)>] ApplicationLoadBalancer data, response status code and response headers
    def datacenters_applicationloadbalancers_find_by_application_load_balancer_id_with_http_info(datacenter_id, application_load_balancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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] || 'ApplicationLoadBalancer'

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_find_by_application_load_balancer_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Delete an ALB Flow Log by ID
    # Deletes the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [nil]
    def datacenters_applicationloadbalancers_flowlogs_delete(datacenter_id, application_load_balancer_id, flow_log_id, opts = {})
      datacenters_applicationloadbalancers_flowlogs_delete_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, opts)
      nil
    end

    # Delete an ALB Flow Log by ID
    # Deletes the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
    def datacenters_applicationloadbalancers_flowlogs_delete_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_delete"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_delete"
      end
      # verify the required parameter 'flow_log_id' is set
      if @api_client.config.client_side_validation && flow_log_id.nil?
        fail ArgumentError, "Missing the required parameter 'flow_log_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_delete"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_delete, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/flowlogs/{flowLogId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'flowLogId' + '}', CGI.escape(flow_log_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]

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_flowlogs_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get an ALB Flow Log by ID
    # Retrieves the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [FlowLog]
    def datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id(datacenter_id, application_load_balancer_id, flow_log_id, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, opts)
      data
    end

    # Get an ALB Flow Log by ID
    # Retrieves the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(FlowLog, Integer, Hash)>] FlowLog data, response status code and response headers
    def datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id"
      end
      # verify the required parameter 'flow_log_id' is set
      if @api_client.config.client_side_validation && flow_log_id.nil?
        fail ArgumentError, "Missing the required parameter 'flow_log_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/flowlogs/{flowLogId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'flowLogId' + '}', CGI.escape(flow_log_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] || 'FlowLog'

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_flowlogs_find_by_flow_log_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get ALB Flow Logs
    # Retrieves the flow logs for the specified Application Load Balancer.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [FlowLogs]
    def datacenters_applicationloadbalancers_flowlogs_get(datacenter_id, application_load_balancer_id, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_flowlogs_get_with_http_info(datacenter_id, application_load_balancer_id, opts)
      data
    end

    # Get ALB Flow Logs
    # Retrieves the flow logs for the specified Application Load Balancer.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(FlowLogs, Integer, Hash)>] FlowLogs data, response status code and response headers
    def datacenters_applicationloadbalancers_flowlogs_get_with_http_info(datacenter_id, application_load_balancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_get"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_get"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_get, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/flowlogs'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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] || 'FlowLogs'

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_flowlogs_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Partially Modify an ALB Flow Log by ID
    # Updates the properties of the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param application_load_balancer_flow_log_properties [FlowLogProperties] The properties of the ALB flow log to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [FlowLog]
    def datacenters_applicationloadbalancers_flowlogs_patch(datacenter_id, application_load_balancer_id, flow_log_id, application_load_balancer_flow_log_properties, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_flowlogs_patch_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, application_load_balancer_flow_log_properties, opts)
      data
    end

    # Partially Modify an ALB Flow Log by ID
    # Updates the properties of the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param application_load_balancer_flow_log_properties [FlowLogProperties] The properties of the ALB flow log to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(FlowLog, Integer, Hash)>] FlowLog data, response status code and response headers
    def datacenters_applicationloadbalancers_flowlogs_patch_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, application_load_balancer_flow_log_properties, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_patch"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_patch"
      end
      # verify the required parameter 'flow_log_id' is set
      if @api_client.config.client_side_validation && flow_log_id.nil?
        fail ArgumentError, "Missing the required parameter 'flow_log_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_patch"
      end
      # verify the required parameter 'application_load_balancer_flow_log_properties' is set
      if @api_client.config.client_side_validation && application_load_balancer_flow_log_properties.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_flow_log_properties' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_patch"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_patch, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/flowlogs/{flowLogId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'flowLogId' + '}', CGI.escape(flow_log_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] || @api_client.object_to_http_body(application_load_balancer_flow_log_properties)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_flowlogs_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create an ALB Flow Log
    # Creates a flow log for the Application Load Balancer specified by ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer_flow_log [FlowLog] The flow log to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [FlowLog]
    def datacenters_applicationloadbalancers_flowlogs_post(datacenter_id, application_load_balancer_id, application_load_balancer_flow_log, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_flowlogs_post_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer_flow_log, opts)
      data
    end

    # Create an ALB Flow Log
    # Creates a flow log for the Application Load Balancer specified by ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer_flow_log [FlowLog] The flow log to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(FlowLog, Integer, Hash)>] FlowLog data, response status code and response headers
    def datacenters_applicationloadbalancers_flowlogs_post_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer_flow_log, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_post"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_post"
      end
      # verify the required parameter 'application_load_balancer_flow_log' is set
      if @api_client.config.client_side_validation && application_load_balancer_flow_log.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_flow_log' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_post"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_post, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/flowlogs'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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(application_load_balancer_flow_log)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_flowlogs_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Modify an ALB Flow Log by ID
    # Modifies the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param application_load_balancer_flow_log [FlowLogPut] The modified ALB flow log.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [FlowLog]
    def datacenters_applicationloadbalancers_flowlogs_put(datacenter_id, application_load_balancer_id, flow_log_id, application_load_balancer_flow_log, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_flowlogs_put_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, application_load_balancer_flow_log, opts)
      data
    end

    # Modify an ALB Flow Log by ID
    # Modifies the Application Load Balancer flow log specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param flow_log_id [String] The unique ID of the flow log.
    # @param application_load_balancer_flow_log [FlowLogPut] The modified ALB flow log.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(FlowLog, Integer, Hash)>] FlowLog data, response status code and response headers
    def datacenters_applicationloadbalancers_flowlogs_put_with_http_info(datacenter_id, application_load_balancer_id, flow_log_id, application_load_balancer_flow_log, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_put"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_put"
      end
      # verify the required parameter 'flow_log_id' is set
      if @api_client.config.client_side_validation && flow_log_id.nil?
        fail ArgumentError, "Missing the required parameter 'flow_log_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_put"
      end
      # verify the required parameter 'application_load_balancer_flow_log' is set
      if @api_client.config.client_side_validation && application_load_balancer_flow_log.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_flow_log' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_put"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_put, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/flowlogs/{flowLogId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'flowLogId' + '}', CGI.escape(flow_log_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(application_load_balancer_flow_log)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_flowlogs_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_flowlogs_put\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Delete an ALB Forwarding Rule by ID
    # Deletes the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [nil]
    def datacenters_applicationloadbalancers_forwardingrules_delete(datacenter_id, application_load_balancer_id, forwarding_rule_id, opts = {})
      datacenters_applicationloadbalancers_forwardingrules_delete_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, opts)
      nil
    end

    # Delete an ALB Forwarding Rule by ID
    # Deletes the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
    def datacenters_applicationloadbalancers_forwardingrules_delete_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_delete"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_delete"
      end
      # verify the required parameter 'forwarding_rule_id' is set
      if @api_client.config.client_side_validation && forwarding_rule_id.nil?
        fail ArgumentError, "Missing the required parameter 'forwarding_rule_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_delete"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_delete, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/forwardingrules/{forwardingRuleId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'forwardingRuleId' + '}', CGI.escape(forwarding_rule_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]

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_forwardingrules_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get an ALB Forwarding Rule by ID
    # Retrieves the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancerForwardingRule]
    def datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id(datacenter_id, application_load_balancer_id, forwarding_rule_id, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, opts)
      data
    end

    # Get an ALB Forwarding Rule by ID
    # Retrieves the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancerForwardingRule, Integer, Hash)>] ApplicationLoadBalancerForwardingRule data, response status code and response headers
    def datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id"
      end
      # verify the required parameter 'forwarding_rule_id' is set
      if @api_client.config.client_side_validation && forwarding_rule_id.nil?
        fail ArgumentError, "Missing the required parameter 'forwarding_rule_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/forwardingrules/{forwardingRuleId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'forwardingRuleId' + '}', CGI.escape(forwarding_rule_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] || 'ApplicationLoadBalancerForwardingRule'

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get ALB Forwarding Rules
    # Lists the forwarding rules of the specified Application Load Balancer.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancerForwardingRules]
    def datacenters_applicationloadbalancers_forwardingrules_get(datacenter_id, application_load_balancer_id, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_forwardingrules_get_with_http_info(datacenter_id, application_load_balancer_id, opts)
      data
    end

    # Get ALB Forwarding Rules
    # Lists the forwarding rules of the specified Application Load Balancer.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancerForwardingRules, Integer, Hash)>] ApplicationLoadBalancerForwardingRules data, response status code and response headers
    def datacenters_applicationloadbalancers_forwardingrules_get_with_http_info(datacenter_id, application_load_balancer_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_get"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_get"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_get, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/forwardingrules'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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] || 'ApplicationLoadBalancerForwardingRules'

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_forwardingrules_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Partially modify an ALB Forwarding Rule by ID
    # Updates the properties of the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param application_load_balancer_forwarding_rule_properties [ApplicationLoadBalancerForwardingRuleProperties] The properties of the forwarding rule to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancerForwardingRule]
    def datacenters_applicationloadbalancers_forwardingrules_patch(datacenter_id, application_load_balancer_id, forwarding_rule_id, application_load_balancer_forwarding_rule_properties, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, application_load_balancer_forwarding_rule_properties, opts)
      data
    end

    # Partially modify an ALB Forwarding Rule by ID
    # Updates the properties of the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param application_load_balancer_forwarding_rule_properties [ApplicationLoadBalancerForwardingRuleProperties] The properties of the forwarding rule to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancerForwardingRule, Integer, Hash)>] ApplicationLoadBalancerForwardingRule data, response status code and response headers
    def datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, application_load_balancer_forwarding_rule_properties, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch"
      end
      # verify the required parameter 'forwarding_rule_id' is set
      if @api_client.config.client_side_validation && forwarding_rule_id.nil?
        fail ArgumentError, "Missing the required parameter 'forwarding_rule_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch"
      end
      # verify the required parameter 'application_load_balancer_forwarding_rule_properties' is set
      if @api_client.config.client_side_validation && application_load_balancer_forwarding_rule_properties.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_forwarding_rule_properties' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/forwardingrules/{forwardingRuleId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'forwardingRuleId' + '}', CGI.escape(forwarding_rule_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] || @api_client.object_to_http_body(application_load_balancer_forwarding_rule_properties)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_forwardingrules_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create an ALB Forwarding Rule
    # Creates a forwarding rule for the specified Application Load Balancer.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer_forwarding_rule [ApplicationLoadBalancerForwardingRule] The forwarding rule to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancerForwardingRule]
    def datacenters_applicationloadbalancers_forwardingrules_post(datacenter_id, application_load_balancer_id, application_load_balancer_forwarding_rule, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_forwardingrules_post_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer_forwarding_rule, opts)
      data
    end

    # Create an ALB Forwarding Rule
    # Creates a forwarding rule for the specified Application Load Balancer.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer_forwarding_rule [ApplicationLoadBalancerForwardingRule] The forwarding rule to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancerForwardingRule, Integer, Hash)>] ApplicationLoadBalancerForwardingRule data, response status code and response headers
    def datacenters_applicationloadbalancers_forwardingrules_post_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer_forwarding_rule, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_post"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_post"
      end
      # verify the required parameter 'application_load_balancer_forwarding_rule' is set
      if @api_client.config.client_side_validation && application_load_balancer_forwarding_rule.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_forwarding_rule' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_post"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_post, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/forwardingrules'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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(application_load_balancer_forwarding_rule)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_forwardingrules_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Modify an ALB Forwarding Rule by ID
    # Modifies the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param application_load_balancer_forwarding_rule [ApplicationLoadBalancerForwardingRulePut] The modified ALB forwarding rule.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancerForwardingRule]
    def datacenters_applicationloadbalancers_forwardingrules_put(datacenter_id, application_load_balancer_id, forwarding_rule_id, application_load_balancer_forwarding_rule, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_forwardingrules_put_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, application_load_balancer_forwarding_rule, opts)
      data
    end

    # Modify an ALB Forwarding Rule by ID
    # Modifies the Application Load Balancer forwarding rule specified by its ID.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param forwarding_rule_id [String] The unique ID of the forwarding rule.
    # @param application_load_balancer_forwarding_rule [ApplicationLoadBalancerForwardingRulePut] The modified ALB forwarding rule.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancerForwardingRule, Integer, Hash)>] ApplicationLoadBalancerForwardingRule data, response status code and response headers
    def datacenters_applicationloadbalancers_forwardingrules_put_with_http_info(datacenter_id, application_load_balancer_id, forwarding_rule_id, application_load_balancer_forwarding_rule, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_put"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_put"
      end
      # verify the required parameter 'forwarding_rule_id' is set
      if @api_client.config.client_side_validation && forwarding_rule_id.nil?
        fail ArgumentError, "Missing the required parameter 'forwarding_rule_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_put"
      end
      # verify the required parameter 'application_load_balancer_forwarding_rule' is set
      if @api_client.config.client_side_validation && application_load_balancer_forwarding_rule.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_forwarding_rule' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_put"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_put, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}/forwardingrules/{forwardingRuleId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_id.to_s)).sub('{' + 'forwardingRuleId' + '}', CGI.escape(forwarding_rule_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(application_load_balancer_forwarding_rule)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_forwardingrules_put\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get Application Load Balancers
    # Lists all Application Load Balancers within a data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @option opts [Integer] :offset The first element (from the complete list of the elements) to include in the response (used together with &lt;b&gt;&lt;i&gt;limit&lt;/i&gt;&lt;/b&gt; for pagination). (default to 0)
    # @option opts [Integer] :limit The maximum number of elements to return (use together with offset for pagination). (default to 1000)
    # @return [ApplicationLoadBalancers]
    def datacenters_applicationloadbalancers_get(datacenter_id, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_get_with_http_info(datacenter_id, opts)
      data
    end

    # Get Application Load Balancers
    # Lists all Application Load Balancers within a data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @option opts [Integer] :offset The first element (from the complete list of the elements) to include in the response (used together with &lt;b&gt;&lt;i&gt;limit&lt;/i&gt;&lt;/b&gt; for pagination).
    # @option opts [Integer] :limit The maximum number of elements to return (use together with offset for pagination).
    # @return [Array<(ApplicationLoadBalancers, Integer, Hash)>] ApplicationLoadBalancers data, response status code and response headers
    def datacenters_applicationloadbalancers_get_with_http_info(datacenter_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_get"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_get, must be greater than or equal to 1.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers'.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] || 'ApplicationLoadBalancers'

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Partially Modify an Application Load Balancer by ID
    # Updates the properties of the specified Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer_properties [ApplicationLoadBalancerProperties] The Application Load Balancer properties to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancer]
    def datacenters_applicationloadbalancers_patch(datacenter_id, application_load_balancer_id, application_load_balancer_properties, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_patch_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer_properties, opts)
      data
    end

    # Partially Modify an Application Load Balancer by ID
    # Updates the properties of the specified Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer_properties [ApplicationLoadBalancerProperties] The Application Load Balancer properties to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancer, Integer, Hash)>] ApplicationLoadBalancer data, response status code and response headers
    def datacenters_applicationloadbalancers_patch_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer_properties, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_patch"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_patch"
      end
      # verify the required parameter 'application_load_balancer_properties' is set
      if @api_client.config.client_side_validation && application_load_balancer_properties.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_properties' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_patch"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_patch, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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] || @api_client.object_to_http_body(application_load_balancer_properties)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create an Application Load Balancer
    # Creates an Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer [ApplicationLoadBalancer] The Application Load Balancer to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancer]
    def datacenters_applicationloadbalancers_post(datacenter_id, application_load_balancer, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_post_with_http_info(datacenter_id, application_load_balancer, opts)
      data
    end

    # Create an Application Load Balancer
    # Creates an Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer [ApplicationLoadBalancer] The Application Load Balancer to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancer, Integer, Hash)>] ApplicationLoadBalancer data, response status code and response headers
    def datacenters_applicationloadbalancers_post_with_http_info(datacenter_id, application_load_balancer, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_post"
      end
      # verify the required parameter 'application_load_balancer' is set
      if @api_client.config.client_side_validation && application_load_balancer.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_post"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_post, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers'.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(application_load_balancer)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Modify an Application Load Balancer by ID
    # Modifies the properties of the specified Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer [ApplicationLoadBalancerPut] The modified Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [ApplicationLoadBalancer]
    def datacenters_applicationloadbalancers_put(datacenter_id, application_load_balancer_id, application_load_balancer, opts = {})
      data, _status_code, _headers = datacenters_applicationloadbalancers_put_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer, opts)
      data
    end

    # Modify an Application Load Balancer by ID
    # Modifies the properties of the specified Application Load Balancer within the data center.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param application_load_balancer_id [String] The unique ID of the Application Load Balancer.
    # @param application_load_balancer [ApplicationLoadBalancerPut] The modified Application Load Balancer.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) 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 with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(ApplicationLoadBalancer, Integer, Hash)>] ApplicationLoadBalancer data, response status code and response headers
    def datacenters_applicationloadbalancers_put_with_http_info(datacenter_id, application_load_balancer_id, application_load_balancer, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_put"
      end
      # verify the required parameter 'application_load_balancer_id' is set
      if @api_client.config.client_side_validation && application_load_balancer_id.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer_id' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_put"
      end
      # verify the required parameter 'application_load_balancer' is set
      if @api_client.config.client_side_validation && application_load_balancer.nil?
        fail ArgumentError, "Missing the required parameter 'application_load_balancer' when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_put"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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 ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_put, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/applicationloadbalancers/{applicationLoadBalancerId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'applicationLoadBalancerId' + '}', CGI.escape(application_load_balancer_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(application_load_balancer)

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

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

      new_options = opts.merge(
        :operation => :"ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_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: ApplicationLoadBalancersApi#datacenters_applicationloadbalancers_put\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end