Browse Source

add host object, to be used for mappings...

main
John-Mark Gurney 2 years ago
parent
commit
56503fdcdb
2 changed files with 79 additions and 4 deletions
  1. +21
    -0
      ui/fixtures/cmd.hosts.json
  2. +58
    -4
      ui/medashare/cli.py

+ 21
- 0
ui/fixtures/cmd.hosts.json View File

@@ -0,0 +1,21 @@
[
{
"title": "gen ident",
"cmd": [ "genident", "name=A Test User" ]
},
{
"special": "set hostid",
"comment": "and that a modified hostid",
"hostid": "ceaa4862-dd00-41ba-9787-7480ec1b2679"
},
{
"title": "that hosts lists itself",
"cmd": [ "hosts" ],
"stdout_re": ".*\tceaa4862-dd00-41ba-9787-7480ec1b2679\n"
},
{
"special": "verify store object cnt",
"comment": "and that the host object was created",
"count": 1
}
]

+ 58
- 4
ui/medashare/cli.py View File

@@ -30,6 +30,7 @@ import pathlib
import pasn1
import re
import shutil
import socket
import string
import sys
import tempfile
@@ -327,6 +328,11 @@ class Persona(object):

self._created_by_ref = self._identity.uuid

def Host(self, *args, **kwargs):
kwargs['created_by_ref'] = self.uuid

return self.sign(Host(*args, **kwargs))

def Container(self, *args, **kwargs):
kwargs['created_by_ref'] = self.uuid

@@ -471,6 +477,13 @@ class ObjectStore(object):
self._created_by_ref = created_by_ref
self._uuids = {}
self._hashes = {}
self._hostuuids = {}

def get_host(self, hostuuid):
return self._hostuuids[hostuuid]

def get_hosts(self):
return self._hostuuids.values()

@staticmethod
def makehash(hashstr, strict=True):
@@ -553,10 +566,18 @@ class ObjectStore(object):
self._uuids[_makeuuid(obj.id)] = obj
elif obj.type == 'container':
self._uuids[obj.make_id(obj.uri)] = obj
elif obj.type == 'host':
self._uuids[obj.hostuuid] = obj
self._hostuuids[obj.hostuuid] = obj

for j in obj.hashes:
h = self.makehash(j)
self._hashes.setdefault(h, []).append(obj)
try:
hashes = obj.hashes
except AttributeError:
pass
else:
for j in hashes:
h = self.makehash(j)
self._hashes.setdefault(h, []).append(obj)

@classmethod
def load(cls, fname):
@@ -679,6 +700,9 @@ def _hashfile(fname):

return '%s:%s' % (_defaulthash, hash.hexdigest())

class Host(MDBase):
_type = 'host'

class FileObject(MDBase):
_type = 'file'

@@ -892,6 +916,32 @@ def cmd_modify(options):

write_objstore(options, objstr)

def printhost(host):
print('%s\t%s' % (host.name, host.hostuuid))

def cmd_hosts(options):
persona, objstr = get_objstore(options)

selfuuid = hostuuid()

try:
host = objstr.get_host(selfuuid)
except KeyError:
host = persona.Host(name=socket.gethostname(), hostuuid=selfuuid)
objstr.loadobj(host)

printhost(host)

hosts = objstr.get_hosts()

for i in hosts:
if i is host:
continue

printhost(i)

write_objstore(options, objstr)

def cmd_dump(options):
persona, objstr = get_objstore(options)

@@ -1096,6 +1146,9 @@ def main():
help='files to modify')
parser_container.set_defaults(func=cmd_container)

parser_hosts = subparsers.add_parser('hosts', help='dump all the hosts, self is always first')
parser_hosts.set_defaults(func=cmd_hosts)

parser_dump = subparsers.add_parser('dump', help='dump all the objects')
parser_dump.set_defaults(func=cmd_dump)

@@ -1597,7 +1650,8 @@ class _TestCases(unittest.TestCase):
self.assertEqual(objcnt, cmd['count'])
elif special == 'set hostid':
hostidpatch = mock.patch(__name__ + '.hostuuid')
hostidpatch.start().return_value = uuid.uuid4()
hid = cmd['hostid'] if 'hostid' in cmd else uuid.uuid4()
hostidpatch.start().return_value = hid
patches.append(hostidpatch)
elif special == 'iter is unique':
objst = ObjectStore.load(storefname)


Loading…
Cancel
Save