From f5e4b38043ce566da472853d48382c5c1f7871f2 Mon Sep 17 00:00:00 2001 From: Brent Baude Date: Mon, 22 May 2017 13:41:55 -0500 Subject: [PATCH] Atomic/util.py: Add logic to install lookup for shortnames If a shortname is used to run an image, we need to transform the short name into the fq-name when doing the lookup in the installed images data. Reported in BZ #1454292 --- Atomic/backends/_docker.py | 9 +++++++-- Atomic/util.py | 13 +++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Atomic/backends/_docker.py b/Atomic/backends/_docker.py index 53a67adc..04659eed 100644 --- a/Atomic/backends/_docker.py +++ b/Atomic/backends/_docker.py @@ -467,10 +467,15 @@ def uninstall(self, iobject, name=None, **kwargs): atomic.display(cmd) if args.display: return 0 - if cmd: - return util.check_call(cmd, env=atomic.cmd_env()) install_data = util.InstallData.get_install_data_by_id(iobject.id) + + if cmd: + result = util.check_call(cmd, env=atomic.cmd_env()) + if result == 0: + util.InstallData.delete_by_id(iobject.id, ignore=ignore) + return result + system_package_nvra = install_data.get("system_package_nvra", None) if system_package_nvra: RPMHostInstall.uninstall_rpm(system_package_nvra) diff --git a/Atomic/util.py b/Atomic/util.py index f6116bb8..5f6590f8 100644 --- a/Atomic/util.py +++ b/Atomic/util.py @@ -857,8 +857,11 @@ def read_install_data(cls): def write_install_data(cls, new_data): install_data = cls.read_install_data() with file_lock(ATOMIC_INSTALL_JSON): - for x in new_data: - install_data[x] = new_data[x] + if len(new_data) < 1: + install_data = {} + else: + for x in new_data: + install_data[x] = new_data[x] temp_file = tempfile.NamedTemporaryFile(mode='w', delete=False) json.dump(install_data, temp_file) temp_file.close() @@ -908,6 +911,12 @@ def image_installed(cls, img_object): return True if install_data.get("{}:{}".format(img_object.input_name, img_object.tag), None): return True + try: + from Atomic.discovery import RegistryInspectError + if install_data.get(img_object.fq_name, None): + return True + except RegistryInspectError: + pass return False class Decompose(object):