From e91fa97fbbe5e9e59baf243cb71af6fbe8f9afc1 Mon Sep 17 00:00:00 2001 From: Stanislaw Adaszewski Date: Tue, 21 Apr 2020 18:03:23 +0200 Subject: [PATCH] Started working on step hashes. --- focker-compose.yml | 15 +++++++++++++++ hash.py | 0 steps.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 focker-compose.yml delete mode 100644 hash.py create mode 100644 steps.py diff --git a/focker-compose.yml b/focker-compose.yml new file mode 100644 index 0000000..78f5b21 --- /dev/null +++ b/focker-compose.yml @@ -0,0 +1,15 @@ +defaults: + jail: + mount.devfs: true + interface: lo1 + exec.start: /bin/sh /etc/rc + exec.stop: /bin/sh /etc/rc.shutdown + +services: + gateway: + image: freebsd-12.1 + jail: + ip4.address: 127.0.0.2 + +volumes: + gateway-data: {} diff --git a/hash.py b/hash.py deleted file mode 100644 index e69de29..0000000 diff --git a/steps.py b/steps.py new file mode 100644 index 0000000..b046e3a --- /dev/null +++ b/steps.py @@ -0,0 +1,46 @@ +import hashlib +import json + + +def filehash(fname): + h = hashlib.sha256() + with open(fname, 'rb') as f: + while True: + data = f.read(1024*1024*4) + if not data: + break + h.update(data) + res = h.hexdigest() + return res + + +class RunStep(object): + def __init__(self, base, spec): + self.base = base + self.spec = spec + + def hash(self): + res = hashlib.sha256( + json.dumps(( self.base, self.spec )) + .encode('utf-8')).hexdigest() + return res + + +class CopyStep(object): + def __init__(self, base, spec): + if not isinstance(spec, list): + raise ValueError('CopyStep spec should be a list') + self.base = base + self.spec = spec + + def hash(self): + if len(self.spec) == 0: + fh = [] + elif isinstance(self.spec[0], list): + fh = list(map(lambda a: filehash(a[0]), self.spec)) + else: + fh = [ filehash(self.spec[0]) ] + res = hashlib.sha256( + json.dumps(( self.base, fh, self.spec )) + .encode('utf-8')).hexdigest() + return res