class_docstr: Fiber configuration object. Available configurations:
  
  | key                   | Type | Default | Notes |
  | --------------------- |:------|:-----|:------|
  | debug                 | bool  | False | Set this to `True` to turn on debugging |
  | image                 | str   | None  | Docker image to use when starting  new processes |
  | default_image         | str   | None  | Default docker image to use when `image` config value  is not set |
  | backend               | str   | None  | Fiber backend to use when starting new processes. Check [here](platforms.md) for available backends |
  | default_backend       | str   | `local` | Default Fiber backend to use when `backend` config is not set |
  | log_level             | str/int | `logging.INFO` | Fiber log level. This config accepts either a int value (log levels from `logging` module like `logging.INFO`) or strings: `debug`, `info`, `warning`, `error`, `critical` |
  | log_file              | str   | `/tmp/fiber.log` | Default fiber log file path. Fiber will append the process name to this value and create one log file for each process. A special value `stdout` means to print the logs to standard output |
  | ipc_admin_master_port | int   | `0`   | The port that master process uses to communicate with child processes. Default value is `0` which means the master process will choose a random port |
  | kubernetes_namespace | str   | `default` | The namespace that Fiber `kubernetes` backend will use to create pods and do other work on Kubernetes |
code: def __init__(self, conf_file=None):
      # Not documented, people should not use this
      self.merge_output = False
      self.debug = False
      self.image = None
      self.default_image = DEFAULT_IMAGE
      self.backend = None
      self.default_backend = "local"
      # Not documented, this should be removed because it's not used for now
      self.use_bash = False
      self.log_level = logging.INFO
      self.log_file = "/tmp/fiber.log"
      # If ipc_active is True, Fiber worker processes will connect
      # to the master process. Otherwise, the master process will connect
      # to worker processes.
      # Not documented, should only be used internally
      self.ipc_active = True
      # if ipc_active is True, this can be 0, otherwise, it can only be a
      # valid TCP port number. Default 0.
      self.ipc_admin_master_port = 0
      # Not documented, this is only used when `ipc_active` is False
      self.ipc_admin_worker_port = 8000
      # Not documented, need to fine tune this
      self.cpu_per_job = 1
      # Not documented, need to fine tune this
      self.mem_per_job = None
      self.use_push_queue = True
      self.kubernetes_namespace = "default"
  
      if conf_file is None:
          conf_file = ".fiberconfig"
  
      # Load config from config file
      if os.path.exists(conf_file):
          logger.debug("loading config from %s", conf_file)
          config = configparser.ConfigParser()
          config.read(conf_file)
          for k in config["default"]:
              if k in self.__dict__:
                  self.__dict__[k] = config["default"][k]
              else:
                  raise ValueError(
                      'unknown config key "{}" in {}. Valid keys: '
                      "{}".format(
                          k, conf_file, [key for key in self.__dict__]
                      )
                  )
  
      else:
          logger.debug("no fiber config file (%s) found", conf_file)
  
      # load environment variable overwrites
      for k in self.__dict__:
          name = "FIBER_" + k.upper()
          val = os.environ.get(name, None)
          if val:
              self.__dict__[k] = val
  
      # rewrite values
      if isinstance(self.log_level, str):
          level = self.log_level.lower()
          if level not in LOG_LEVELS:
              logger.debug("bad logging level: %s", self.log_level)
              level = logging.NOTSET
          else:
              level = LOG_LEVELS[level]
          self.log_level = level
  
      if isinstance(self.ipc_active, str):
          self.ipc_active = str2bool(self.ipc_active)
  
      if isinstance(self.cpu_per_job, str):
          self.cpu_per_job = int(self.cpu_per_job)
  
      if isinstance(self.mem_per_job, str):
          self.mem_per_job = int(self.mem_per_job)
  
file_path: fiber/fiber/config.py
imports: import os
  import logging
  import configparser
label_desc: Use image node_id 1 to create a new Config object from inherited base classes: object with example: obj = Config(conf_file)