docs: def configure_volume(before_change=lambda: None, after_change=lambda: None):
      '''Set up storage (or don't) according to the charm's volume configuration.
         Returns the mount point or "ephemeral". before_change and after_change
         are optional functions to be called if the volume configuration changes.
      '''
  
      config = get_config()
      if not config:
          hookenv.log('Failed to read volume configuration', hookenv.CRITICAL)
          raise VolumeConfigurationError()
  
      if config['ephemeral']:
          if os.path.ismount(config['mountpoint']):
              before_change()
              unmount_volume(config)
              after_change()
          return 'ephemeral'
      else:
          # persistent storage
          if os.path.ismount(config['mountpoint']):
              mounts = dict(managed_mounts())
              if mounts.get(config['mountpoint']) != config['device']:
                  before_change()
                  unmount_volume(config)
                  mount_volume(config)
                  after_change()
          else:
              before_change()
              mount_volume(config)
              after_change()
          return config['mountpoint']