whole_func_string: function CloudProvider(options) {
      const logger = options ? options.logger : undefined;
      let loggerOptions = options ? options.loggerOptions : undefined;
  
      this.options = {};
      if (options) {
          Object.keys(options).forEach((option) => {
              this.options[option] = options[option];
          });
      }
  
      this.clOptions = {};
      if (options && options.clOptions) {
          Object.keys(options.clOptions).forEach((option) => {
              this.clOptions[option] = options.clOptions[option];
          });
      }
  
      // Holder for supported features. If an implementation supports an features,
      // set them to true in this map
      this.features = {};
  
      if (logger) {
          this.logger = logger;
      } else {
          loggerOptions = loggerOptions || { logLevel: 'none' };
          loggerOptions.module = module;
          this.logger = Logger.getLogger(loggerOptions);
          this.loggerOptions = loggerOptions;
      }
  }
func_code_string: function CloudProvider(options) {
      const logger = options ? options.logger : undefined;
      let loggerOptions = options ? options.loggerOptions : undefined;
  
      this.options = {};
      if (options) {
          Object.keys(options).forEach((option) => {
              this.options[option] = options[option];
          });
      }
  
      this.clOptions = {};
      if (options && options.clOptions) {
          Object.keys(options.clOptions).forEach((option) => {
              this.clOptions[option] = options.clOptions[option];
          });
      }
  
      // Holder for supported features. If an implementation supports an features,
      // set them to true in this map
      this.features = {};
  
      if (logger) {
          this.logger = logger;
      } else {
          loggerOptions = loggerOptions || { logLevel: 'none' };
          loggerOptions.module = module;
          this.logger = Logger.getLogger(loggerOptions);
          this.loggerOptions = loggerOptions;
      }
  }
func_documentation_string: 1 day 
  Constructor.
  @class
  @classdesc
  Abstract cloud provider implementation.
  
  This class should be inherited from to implement cloud-provider
  specific implementations. Any method in this class that throws
  must be overridded. Methods that do not throw may be optionally
  overridden.
  
  @param {Ojbect} [options]               - Options for the instance.
  @param {Object} [options.clOptions]     - Command line options if called from a script.
  @param {Object} [options.logger]        - Logger to use. Or, pass loggerOptions to get your own logger.
  @param {Object} [options.loggerOptions] - Options for the logger.
  See {@link module:logger.getLogger} for details.