summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2015-03-27 16:20:05 -0400
committerScott Moser <smoser@ubuntu.com>2015-03-27 16:20:05 -0400
commit09cc5909e3d69c03622b7dc2c4cb35fd378743cb (patch)
treede15adf402db75ff4f6da45c569c10b10d2338cb
parentcb03a028430902c79f82097230abb7120f366bbd (diff)
downloadvyos-cloud-init-09cc5909e3d69c03622b7dc2c4cb35fd378743cb.tar.gz
vyos-cloud-init-09cc5909e3d69c03622b7dc2c4cb35fd378743cb.zip
be more user-friendly when looking for matching .config
On fspath installs, look for .config files harder. Given a file named: pkg.namespace_0.version_arch.snap We'll search for config files named: pkg.namespace_0.version_arch.config pkg.namespace.config pkg.config
-rw-r--r--cloudinit/config/cc_snappy.py21
-rw-r--r--tests/unittests/test_handler/test_handler_snappy.py34
2 files changed, 50 insertions, 5 deletions
diff --git a/cloudinit/config/cc_snappy.py b/cloudinit/config/cc_snappy.py
index d9dd9771..74ae3ac0 100644
--- a/cloudinit/config/cc_snappy.py
+++ b/cloudinit/config/cc_snappy.py
@@ -67,15 +67,26 @@ BUILTIN_CFG = {
}
+def parse_filename(fname):
+ fname = os.path.basename(fname)
+ fname_noext = fname.rpartition(".")[0]
+ name = fname_noext.partition("_")[0]
+ shortname = name.partition(".")[0]
+ return(name, shortname, fname_noext)
+
+
def get_fs_package_ops(fspath):
if not fspath:
return []
ops = []
- for snapfile in glob.glob(os.path.sep.join([fspath, '*.snap'])):
- cfg = snapfile.rpartition(".")[0] + ".config"
- name = os.path.basename(snapfile).rpartition(".")[0]
- if not os.path.isfile(cfg):
- cfg = None
+ for snapfile in sorted(glob.glob(os.path.sep.join([fspath, '*.snap']))):
+ (name, shortname, fname_noext) = parse_filename(snapfile)
+ cfg = None
+ for cand in set((fname_noext, name, shortname,)):
+ fpcand = os.path.sep.join([fspath, cand]) + ".config"
+ if os.path.isfile(fpcand):
+ cfg = fpcand
+ break
ops.append(makeop('install', name, config=None,
path=snapfile, cfgfile=cfg))
return ops
diff --git a/tests/unittests/test_handler/test_handler_snappy.py b/tests/unittests/test_handler/test_handler_snappy.py
index f0776259..84512846 100644
--- a/tests/unittests/test_handler/test_handler_snappy.py
+++ b/tests/unittests/test_handler/test_handler_snappy.py
@@ -112,6 +112,40 @@ class TestInstallPackages(t_help.TestCase):
makeop_tmpd(self.tmp, 'install', 'snapf2', path="snapf2.snap"),
makeop('install', 'pkg1')])
+ def test_package_ops_common_filename(self):
+ # fish package name from filename
+ # package names likely look like: pkgname.namespace_version_arch.snap
+ fname = "xkcd-webserver.canonical_0.3.4_all.snap"
+ name = "xkcd-webserver.canonical"
+ shortname = "xkcd-webserver"
+
+ # find filenames
+ self.populate_tmp(
+ {"pkg-ws.smoser_0.3.4_all.snap": "pkg-ws-snapdata",
+ "pkg-ws.config": "pkg-ws-config",
+ "pkg1.smoser_1.2.3_all.snap": "pkg1.snapdata",
+ "pkg1.smoser.config": "pkg1.smoser.config-data",
+ "pkg1.config": "pkg1.config-data",
+ "pkg2.smoser_0.0_amd64.snap": "pkg2-snapdata",
+ "pkg2.smoser_0.0_amd64.config": "pkg2.config",
+ })
+
+ ret = get_package_ops(
+ packages=[], configs={}, installed=[], fspath=self.tmp)
+ raise Exception("ret: %s" % ret)
+ self.assertEqual(
+ ret,
+ [makeop_tmpd(self.tmp, 'install', 'pkg-ws.smoser',
+ path="pkg-ws.smoser_0.3.4_all.snap",
+ cfgfile="pkg-ws.config"),
+ makeop_tmpd(self.tmp, 'install', 'pkg1.smoser',
+ path="pkg1.smoser_1.2.3_all.snap",
+ cfgfile="pkg1.smoser.config"),
+ makeop_tmpd(self.tmp, 'install', 'pkg2.smoser',
+ path="pkg2.smoser_0.0_amd64.snap",
+ cfgfile="pkg2.smoser_0.0_amd64.config"),
+ ])
+
def test_package_ops_config_overrides_file(self):
# config data overrides local file .config
self.populate_tmp(