docs: def _qemu_image_create(disk, create_overlay=False, saltenv='base'):
      '''
      Create the image file using specified disk_size or/and disk_image
  
      Return path to the created image file
      '''
      disk_size = disk.get('size', None)
      disk_image = disk.get('image', None)
  
      if not disk_size and not disk_image:
          raise CommandExecutionError(
              'Unable to create new disk {0}, please specify'
              ' disk size and/or disk image argument'
              .format(disk['filename'])
          )
  
      img_dest = disk['source_file']
      log.debug('Image destination will be %s', img_dest)
      img_dir = os.path.dirname(img_dest)
      log.debug('Image destination directory is %s', img_dir)
      if not os.path.exists(img_dir):
          os.makedirs(img_dir)
  
      if disk_image:
          log.debug('Create disk from specified image %s', disk_image)
          sfn = __salt__['cp.cache_file'](disk_image, saltenv)
  
          qcow2 = False
          if salt.utils.path.which('qemu-img'):
              res = __salt__['cmd.run']('qemu-img info {}'.format(sfn))
              imageinfo = salt.utils.yaml.safe_load(res)
              qcow2 = imageinfo['file format'] == 'qcow2'
          try:
              if create_overlay and qcow2:
                  log.info('Cloning qcow2 image %s using copy on write', sfn)
                  __salt__['cmd.run'](
                      'qemu-img create -f qcow2 -o backing_file={0} {1}'
                      .format(sfn, img_dest).split())
              else:
                  log.debug('Copying %s to %s', sfn, img_dest)
                  salt.utils.files.copyfile(sfn, img_dest)
  
              mask = salt.utils.files.get_umask()
  
              if disk_size and qcow2:
                  log.debug('Resize qcow2 image to %sM', disk_size)
                  __salt__['cmd.run'](
                      'qemu-img resize {0} {1}M'
                      .format(img_dest, disk_size)
                  )
  
              log.debug('Apply umask and remove exec bit')
              mode = (0o0777 ^ mask) & 0o0666
              os.chmod(img_dest, mode)
  
          except (IOError, OSError) as err:
              raise CommandExecutionError(
                  'Problem while copying image. {0} - {1}'
                  .format(disk_image, err)
              )
  
      else:
          # Create empty disk
          try:
              mask = salt.utils.files.get_umask()
  
              if disk_size:
                  log.debug('Create empty image with size %sM', disk_size)
                  __salt__['cmd.run'](
                      'qemu-img create -f {0} {1} {2}M'
                      .format(disk.get('format', 'qcow2'), img_dest, disk_size)
                  )
              else:
                  raise CommandExecutionError(
                      'Unable to create new disk {0},'
                      ' please specify <size> argument'
                      .format(img_dest)
                  )
  
              log.debug('Apply umask and remove exec bit')
              mode = (0o0777 ^ mask) & 0o0666
              os.chmod(img_dest, mode)
  
          except (IOError, OSError) as err:
              raise CommandExecutionError(
                  'Problem while creating volume {0} - {1}'
                  .format(img_dest, err)
              )
  
      return img_dest