mirror of
https://github.com/xcat2/confluent.git
synced 2024-11-25 19:10:10 +00:00
Add hash manifest of new os profiles
When importing an image and taking stock copy, mark the files to allow detection of stock versus customized profile content. This will be used by a rebase command to know when to overwrite or when to leave a file alone.
This commit is contained in:
parent
801e43936c
commit
d97c508d86
@ -645,6 +645,24 @@ def get_profile_label(profile):
|
||||
importing = {}
|
||||
|
||||
|
||||
def get_hashes(dirname):
|
||||
hashmap = {}
|
||||
for dname, _, fnames in os.walk(dirname):
|
||||
for fname in fnames:
|
||||
if fname == 'profile.yaml':
|
||||
continue
|
||||
fullname = os.path.join(dname, fname)
|
||||
currhash = hashlib.sha512()
|
||||
with open(fullname, 'rb') as currf:
|
||||
currd = currf.read(2048)
|
||||
while currd:
|
||||
currhash.update(currd)
|
||||
currd = currf.read(2048)
|
||||
subname = fullname.replace(dirname + '/', '')
|
||||
hashmap[subname] = currhash.hexdigest()
|
||||
return hashmap
|
||||
|
||||
|
||||
def generate_stock_profiles(defprofile, distpath, targpath, osname,
|
||||
profilelist):
|
||||
osd, osversion, arch = osname.split('-')
|
||||
@ -657,6 +675,7 @@ def generate_stock_profiles(defprofile, distpath, targpath, osname,
|
||||
continue
|
||||
oumask = os.umask(0o22)
|
||||
shutil.copytree(srcname, dirname)
|
||||
hmap = get_hashes(dirname)
|
||||
profdata = None
|
||||
try:
|
||||
os.makedirs('{0}/boot/initramfs'.format(dirname), 0o755)
|
||||
@ -674,6 +693,9 @@ def generate_stock_profiles(defprofile, distpath, targpath, osname,
|
||||
if profdata:
|
||||
with open('{0}/profile.yaml'.format(dirname), 'w') as yout:
|
||||
yout.write(profdata)
|
||||
yout.write('# The data below facilitates detecting customization during osdeploy rebase\n')
|
||||
manifestdata = {'distdir': srcname, 'disthashes': hmap}
|
||||
yout.write(yaml.dump(manifestdata, default_flow_style=False))
|
||||
for initrd in os.listdir('{0}/initramfs'.format(defprofile)):
|
||||
fullpath = '{0}/initramfs/{1}'.format(defprofile, initrd)
|
||||
if os.path.isdir(fullpath):
|
||||
|
Loading…
Reference in New Issue
Block a user