docs: def install(name=None,
              refresh=False,
              pkgs=None,
              sources=None,
              **kwargs):
      '''
      Install the passed package, add refresh=True to update the apk database.
  
      name
          The name of the package to be installed. Note that this parameter is
          ignored if either "pkgs" or "sources" is passed. Additionally, please
          note that this option can only be used to install packages from a
          software repository. To install a package file manually, use the
          "sources" option.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install <package name>
  
      refresh
          Whether or not to refresh the package database before installing.
  
  
      Multiple Package Installation Options:
  
      pkgs
          A list of packages to install from a software repository. Must be
          passed as a python list.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install pkgs='["foo", "bar"]'
  
      sources
          A list of IPK packages to install. Must be passed as a list of dicts,
          with the keys being package names, and the values being the source URI
          or local path to the package.  Dependencies are automatically resolved
          and marked as auto-installed.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install sources='[{"foo": "salt://foo.deb"},{"bar": "salt://bar.deb"}]'
  
      install_recommends
          Whether to install the packages marked as recommended. Default is True.
  
      Returns a dict containing the new package names and versions::
  
          {'<package>': {'old': '<old-version>',
                         'new': '<new-version>'}}
      '''
      refreshdb = salt.utils.data.is_true(refresh)
      pkg_to_install = []
  
      old = list_pkgs()
  
      if name and not (pkgs or sources):
          if ',' in name:
              pkg_to_install = name.split(',')
          else:
              pkg_to_install = [name]
  
      if pkgs:
          # We don't support installing specific version for now
          # so transform the dict in list ignoring version provided
          pkgs = [
              next(iter(p)) for p in pkgs
              if isinstance(p, dict)
          ]
          pkg_to_install.extend(pkgs)
  
      if not pkg_to_install:
          return {}
  
      if refreshdb:
          refresh_db()
  
      cmd = ['apk', 'add']
  
      # Switch in update mode if a package is already installed
      for _pkg in pkg_to_install:
          if old.get(_pkg):
              cmd.append('-u')
              break
  
      cmd.extend(pkg_to_install)
  
      out = __salt__['cmd.run_all'](
          cmd,
          output_loglevel='trace',
          python_shell=False
      )
  
      if out['retcode'] != 0 and out['stderr']:
          errors = [out['stderr']]
      else:
          errors = []
  
      __context__.pop('pkg.list_pkgs', None)
      new = list_pkgs()
      ret = salt.utils.data.compare_dicts(old, new)
  
      if errors:
          raise CommandExecutionError(
              'Problem encountered installing package(s)',
              info={'errors': errors, 'changes': ret}
          )
  
      return ret