code: function BigIp(options) {
      const logger = options ? options.logger : undefined;
      let loggerOptions = options ? options.loggerOptions : undefined;
      let dependentOptions = {};
  
      if (logger) {
          this.logger = logger;
          util.setLogger(logger);
          cryptoUtil.setLogger(logger);
          localKeyUtil.setLogger(logger);
          authn.setLogger(logger);
          dependentOptions = { logger: this.logger };
      } else {
          loggerOptions = loggerOptions || { logLevel: 'none' };
          loggerOptions.module = module;
          this.logger = Logger.getLogger(loggerOptions);
          util.setLoggerOptions(loggerOptions);
          cryptoUtil.setLoggerOptions(loggerOptions);
          localKeyUtil.setLoggerOptions(loggerOptions);
          authn.setLoggerOptions(loggerOptions);
          dependentOptions = { loggerOptions };
      }
  
      // We're not ready until we have all the info we need (password from URL, for example)
      // Must call init() to set this
      this.isInitialized = false;
  
      this.cluster = new BigIpCluster(this, dependentOptions);
      this.gtm = new BigIpGtm(this, dependentOptions);
      this.onboard = new BigIpOnboard(this, dependentOptions);
  }
docs: BigIp constructor
  
  @class
  @classdesc
  Provides core functionality (CRUD operations, ready, etc) and maintains
  references to other modules in f5-cloud-libs.
  
  After createing a BigIp with this constructor, you must call the
  async init() method.
  
  @param {Object} [options]               - Optional parameters.
  @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.