Add release to pkg-map
Add ability to filter in pkg-map on release, which defaults to DIB_RELEASE. As per the examples, release is a more specific target than distro, but distro still has to match. Added a debug flag and ability to use a pkg-map directly for debugging/development. Change-Id: Ie282f96966e46236b06bc276de0168fc7a66c5da
This commit is contained in:
parent
95c874abb9
commit
716b8e14fe
@ -16,18 +16,25 @@ Provides the following:
|
|||||||
--element ELEMENT The element (namespace) to use for translation.
|
--element ELEMENT The element (namespace) to use for translation.
|
||||||
--distro DISTRO The distro name to use for translation. Defaults to
|
--distro DISTRO The distro name to use for translation. Defaults to
|
||||||
DISTRO_NAME
|
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
|
* Any element may create its own pkg-map JSON config file using the
|
||||||
the one of 3 sections for the distro/family/ and or default.
|
one of 4 sections for the release/distro/family/ and or default.
|
||||||
The family is set automatically within pkg-map based on
|
The family is set automatically within pkg-map based on the
|
||||||
the supplied distro name. Families include:
|
supplied distro name. Families include:
|
||||||
|
|
||||||
+ redhat: includes centos, fedora, and rhel distros
|
+ redhat: includes centos, fedora, and rhel distros
|
||||||
+ debian: includes debian and ubuntu distros
|
+ debian: includes debian and ubuntu distros
|
||||||
+ suse: includes the opensuse distro
|
+ 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.
|
The most specific section takes priority.
|
||||||
|
|
||||||
An empty package list can be provided.
|
An empty package list can be provided.
|
||||||
|
|
||||||
Example for Nova and Glance (NOTE: using fictitious package names
|
Example for Nova and Glance (NOTE: using fictitious package names
|
||||||
for Fedora and package mapping for suse family to provide a good
|
for Fedora and package mapping for suse family to provide a good
|
||||||
example!)
|
example!)
|
||||||
@ -35,6 +42,13 @@ Provides the following:
|
|||||||
Example format::
|
Example format::
|
||||||
|
|
||||||
{
|
{
|
||||||
|
"release": {
|
||||||
|
"fedora": {
|
||||||
|
"23": {
|
||||||
|
"nova_package": "foo" "bar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"distro": {
|
"distro": {
|
||||||
"fedora": {
|
"fedora": {
|
||||||
"nova_package": "openstack-compute",
|
"nova_package": "openstack-compute",
|
||||||
|
@ -16,7 +16,9 @@
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import pprint
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
@ -46,24 +48,44 @@ def main():
|
|||||||
" file is found. Otherwise exits with 0.")
|
" file is found. Otherwise exits with 0.")
|
||||||
parser.add_argument('--element', default='',
|
parser.add_argument('--element', default='',
|
||||||
help='The element (namespace) to use for translation.')
|
help='The element (namespace) to use for translation.')
|
||||||
|
parser.add_argument('--pkg-map', default='',
|
||||||
|
help='Path to specific pkg-map file. '
|
||||||
|
'(Useful for testing)')
|
||||||
parser.add_argument('--distro', default=os.environ.get('DISTRO_NAME'),
|
parser.add_argument('--distro', default=os.environ.get('DISTRO_NAME'),
|
||||||
help='The distro name to use for translation.'
|
help='The distro name to use for translation.'
|
||||||
' Defaults to DISTRO_NAME')
|
' Defaults to DISTRO_NAME')
|
||||||
|
parser.add_argument('--release', default=os.environ.get('DIB_RELEASE'),
|
||||||
|
help='A more specfic name for distribution release')
|
||||||
parser.add_argument('--missing-ok', action="store_true",
|
parser.add_argument('--missing-ok', action="store_true",
|
||||||
help='Do not consider missing mappings an error.'
|
help='Do not consider missing mappings an error.'
|
||||||
' Causes packages where no mapping is set to be'
|
' Causes packages where no mapping is set to be'
|
||||||
' printed.')
|
' printed.')
|
||||||
|
parser.add_argument('--debug', dest='debug', action="store_true",
|
||||||
|
help="Enable debugging output")
|
||||||
|
|
||||||
args, extra = parser.parse_known_args()
|
args, extra = parser.parse_known_args()
|
||||||
|
|
||||||
if not args.element:
|
if args.debug:
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
|
if not args.element and not args.pkg_map:
|
||||||
eprint('Please specify an --element argument.')
|
eprint('Please specify an --element argument.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
if args.element and args.pkg_map:
|
||||||
|
eprint('Specify either --element or --pkg-map')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if not args.distro:
|
if not args.distro:
|
||||||
eprint('Please specify a --distro argument or set DISTRO_NAME.')
|
eprint('Please specify a --distro argument or set DISTRO_NAME.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
map_file = '/usr/share/pkg-map/%s' % args.element
|
if args.pkg_map:
|
||||||
|
map_file = args.pkg_map
|
||||||
|
else:
|
||||||
|
map_file = '/usr/share/pkg-map/%s' % args.element
|
||||||
|
|
||||||
|
logging.debug("Map file is %s" % map_file)
|
||||||
if not os.path.exists(map_file):
|
if not os.path.exists(map_file):
|
||||||
if os.environ.get('DIB_DEBUG_TRACE', '0') != '0':
|
if os.environ.get('DIB_DEBUG_TRACE', '0') != '0':
|
||||||
eprint('Map file for %s element does not exist.' % args.element)
|
eprint('Map file for %s element does not exist.' % args.element)
|
||||||
@ -76,16 +98,29 @@ def main():
|
|||||||
with open(map_file) as fd:
|
with open(map_file) as fd:
|
||||||
try:
|
try:
|
||||||
package_names = json.loads(fd.read())
|
package_names = json.loads(fd.read())
|
||||||
|
logging.debug(pprint.pformat(package_names))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
eprint('Unable to parse %s' % map_file)
|
eprint('Unable to parse %s' % map_file)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# Parse mapping data in this form using distro/family/default
|
# Parse mapping data in this form using release/distro/family/default
|
||||||
# Most specific takes priority (distro is most specific).
|
# Most specific takes priority; order is
|
||||||
|
# - release
|
||||||
|
# - distro
|
||||||
|
# - family
|
||||||
|
# - default
|
||||||
# An empty package list can be provided.
|
# An empty package list can be provided.
|
||||||
|
#
|
||||||
# Example for Nova and Glance (using fictitious name for Fedora and SUSE
|
# Example for Nova and Glance (using fictitious name for Fedora and SUSE
|
||||||
# and package mapping for SUSE family)
|
# and package mapping for SUSE family)
|
||||||
# {
|
# {
|
||||||
|
# "release": {
|
||||||
|
# "fedora" : {
|
||||||
|
# "23" : {
|
||||||
|
# "nova_package": "openstack-compute-foo"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
# "distro": {
|
# "distro": {
|
||||||
# "fedora": {
|
# "fedora": {
|
||||||
# "nova_package": "openstack-compute",
|
# "nova_package": "openstack-compute",
|
||||||
@ -115,6 +150,13 @@ def main():
|
|||||||
distro_map = package_names['distro'].get(args.distro)
|
distro_map = package_names['distro'].get(args.distro)
|
||||||
if distro_map:
|
if distro_map:
|
||||||
name_map.update(distro_map)
|
name_map.update(distro_map)
|
||||||
|
if 'release' in package_names:
|
||||||
|
try:
|
||||||
|
# release is a sub-concept of distro
|
||||||
|
release_map = package_names['release'][args.distro][args.release]
|
||||||
|
name_map.update(release_map)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
for name in extra:
|
for name in extra:
|
||||||
pkg_name = name_map.get(name)
|
pkg_name = name_map.get(name)
|
||||||
|
Loading…
Reference in New Issue
Block a user