def __init__(self, template=None, user=None): self._name = None self._user = user self._uuid = None self._version = None self._title = None self._description = None self._includes = [] # includes in template self._includes_resolved = [ ] # data structs for all includes in template self._meta = {} self._repos = RepoSet() # repos in template self._includes_repos = RepoSet() # repos from includes in template self._delta_repos = RepoSet() # repos to add/remove in template self._packages = PackageSet() # packages in template self._includes_packages = PackageSet( ) # packages from includes in template self._delta_packages = PackageSet( ) # packages to add/remove in template self._stores = [] # remote stores for machine self._objects = ObjectSet() # archive definitions in machine self._includes_objects = ObjectSet() # archive definitions in machine self._delta_objects = ObjectSet() # archive definitions in machine self._db = None self._parse_template(template)
def clear(self): """ Clears all includes, objects, packages, repos and stores from the template. Also removes all kickstart meta information. Args: None Returns: Nothing. """ self._includes = [] # includes in template self._includes_resolved = [ ] # data structs for all includes in template self._repos = RepoSet() # repos in template self._includes_repos = RepoSet() # repos from includes in template self._delta_repos = RepoSet() # repos to add/remove in template self._packages = PackageSet() # packages in template self._includes_packages = PackageSet( ) # packages from includes in template self._delta_packages = PackageSet( ) # packages to add/remove in template self._stores = [] # remote stores for machine self._objects = ObjectSet() # archive definitions in machine self._includes_objects = ObjectSet() # archive definitions in machine self._delta_objects = ObjectSet() # archive definitions in machine if 'kickstart' in self._meta: del self._meta['kickstart']
def test_objectset_uniqueness(self): o1 = Object({ 'name': 'foo', 'data': 'abc', 'checksum': { 'sha256': 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' }, 'actions': [] }) o2 = Object({ 'name': 'bar', 'data': 'abc', 'checksum': { 'sha256': 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' }, 'actions': [] }) o3 = Object({ 'name': 'baz', 'data': 'xyz', 'checksum': { 'sha256': '3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282' }, 'actions': [] }) l1 = ObjectSet() l1.add(o1) self.assertTrue(len(l1) == 1) # adding second object of same checksum should overwrite # existing object with undefined arch l1.add(o2) self.assertTrue(len(l1) == 1) self.assertTrue(ObjectSet([o2]), l1) l1.add(o3) self.assertTrue(len(l1) == 2) self.assertTrue(ObjectSet([o2, o3]), l1)
def test_objectset_update(self): o1 = Object({ 'name': 'foo', 'data': 'abc', 'checksum': { 'sha256': 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' }, 'actions': [] }) o2 = Object({ 'name': 'bar', 'data': 'abc', 'checksum': { 'sha256': 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' }, 'actions': [] }) o3 = Object({ 'name': 'baz', 'data': 'xyz', 'checksum': { 'sha256': '3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282' }, 'actions': [] }) l1 = ObjectSet() l2 = ObjectSet() l1.add(o2) l1.add(o3) self.assertEqual(ObjectSet([o2, o3]), l1) l2.add(o1) self.assertEqual(ObjectSet([o1]), l2) l2.update(l1) self.assertEqual(ObjectSet([o2, o3]), l2)
def test_objectset_difference(self): o1 = Object({ 'name': 'foo', 'data': 'abc', 'checksum': { 'sha256': 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' }, 'actions': [] }) o2 = Object({ 'name': 'bar', 'data': 'abc', 'checksum': { 'sha256': 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' }, 'actions': [] }) o3 = Object({ 'name': 'baz', 'data': 'xyz', 'checksum': { 'sha256': '3608bca1e44ea6c4d268eb6db02260269892c0b42b86bbf1e77a6fa16c3c9282' }, 'actions': [] }) l1 = ObjectSet([o1, o3]) l2 = ObjectSet([o2]) (luniq1, luniq2) = l1.difference(l2) self.assertEqual(ObjectSet([o3]), luniq1) self.assertEqual(ObjectSet([]), luniq2)
def _parse_template(self, template): # parse the string short form if isinstance(template, str): (user, name, version) = self._parse_unv(template) if user: self._user = user if name: self._name = name if version: self._version = version if not self._user or len(self._user) == 0: raise ValueError("template format invalid") if not self._name or len(self._name) == 0: raise ValueError("template format invalid") # parse the dict form, the most common form and directly # relates to the json structures returned by canvas server elif isinstance(template, dict): self._uuid = template.get('uuid', None) self._user = template.get('user', template.get('username', None)) self._name = template.get('stub', None) self._version = template.get('version', None) self._title = template.get('name', self._name) self._description = template.get('description', None) self._includes = template.get('includes', []) self._repos = RepoSet( Repository(r, template=self.unv) for r in template.get('repos', [])) self._packages = PackageSet( Package(p, template=self.unv) for p in template.get('packages', [])) self._stores = template.get('stores', []) self._objects = ObjectSet( Object(o) for o in template.get('objects', [])) self._meta = template.get('meta', {})
def test_template_create_empty(self): t1 = Template({}) self.assertEqual(None, t1.name) self.assertEqual(None, t1.user) self.assertEqual(None, t1.uuid) self.assertEqual(None, t1.description) self.assertEqual([], t1.includes) self.assertEqual([], t1._includes_resolved) self.assertEqual({}, t1._meta) self.assertEqual(RepoSet(), t1.repos) self.assertEqual(RepoSet(), t1._includes_repos) self.assertEqual(RepoSet(), t1._delta_repos) self.assertEqual(PackageSet(), t1._packages) self.assertEqual(PackageSet(), t1._includes_packages) self.assertEqual(PackageSet(), t1._delta_packages) self.assertEqual([], t1._stores) self.assertEqual(ObjectSet(), t1._objects)