diskimage-builder/elements/pkg-map
Ian Wienand 412b333bda Convert pkg-map and svc-map copies to explicit variables
Using the explicit variables, these elements don't have to walk the
path to find the files in other elements; they can extract it directly

Change-Id: I0a64b45e9f2cfa28e84b2859d76b065a6c4590f0
2016-09-08 11:10:19 +10:00
..
bin Move pkg-map to dib-python 2016-06-08 21:16:50 +00:00
extra-data.d Convert pkg-map and svc-map copies to explicit variables 2016-09-08 11:10:19 +10:00
element-deps Move pkg-map to dib-python 2016-06-08 21:16:50 +00:00
README.rst Add release to pkg-map 2016-05-20 14:26:25 +10:00

=======
pkg-map
=======
Map package names to distro specific packages.

Provides the following:

 * bin/pkg-map::

    usage: pkg-map [-h] [--element ELEMENT] [--distro DISTRO]

    Translate package name to distro specific name.

    optional arguments:
      -h, --help         show this help message and exit
      --element ELEMENT  The element (namespace) to use for translation.
      --distro DISTRO    The distro name to use for translation. Defaults to
                         DISTRO_NAME
      --release RELEASE  The release to use for translation.  Defaults to
                         DIB_RELEASE

 * Any element may create its own pkg-map JSON config file using the
   one of 4 sections for the release/distro/family/ and or default.
   The family is set automatically within pkg-map based on the
   supplied distro name. Families include:

     + redhat: includes centos, fedora, and rhel distros
     + debian: includes debian and ubuntu distros
     + suse: includes the opensuse distro

   The release is a specification of distro; i.e. the distro and
   release must mach for a translation.

   The most specific section takes priority.

   An empty package list can be provided.

   Example for Nova and Glance (NOTE: using fictitious package names
   for Fedora and package mapping for suse family to provide a good
   example!)

   Example format::

    {
      "release": {
        "fedora": {
          "23": {
            "nova_package": "foo" "bar"
          }
        }
      },
      "distro": {
        "fedora": {
          "nova_package": "openstack-compute",
          "glance_package": "openstack-image"
        }
      },
      "family": {
        "redhat": {
          "nova_package": "openstack-nova",
          "glance_package": "openstack-glance"
        },
        "suse": {
          "nova_package": ""
        }
      },
      "default": {
        "nova_package": "nova",
        "glance_package": "glance"
      }
    }

   Example commands using this format:

   pkg-map --element nova-compute --distro fedora nova_package

   Returns: openstack-compute

   pkg-map --element nova-compute --distro rhel nova_package

   Returns: openstack-nova

   pkg-map --element nova-compute --distro ubuntu nova_package

   Returns: nova

   pkg-map --element nova-compute --distro opensuse nova_package

   Returns:

 * This output can be used to filter what other tools actually install
   (install-packages can be modified to use this for example)

 * Individual pkg-map files live within each element. For example
   if you are created an Apache element your pkg-map JSON file
   should be created at elements/apache/pkg-map.