diff options
| author | Maciej Kucia <maciej@kucia.net> | 2019-02-09 22:27:50 +0100 |
|---|---|---|
| committer | Maciej Kucia <maciej@kucia.net> | 2019-03-10 21:02:38 +0100 |
| commit | 89e91b69bde7e6f1242f6f167e77e14d7c30521a (patch) | |
| tree | 7a71d7230c44ee6df2957e0afc5062a81393afc9 | |
| parent | f637d139d2d68d3d410bf68c04ed445e983d5e3e (diff) | |
| download | kolla-ansible-89e91b69bde7e6f1242f6f167e77e14d7c30521a.tar.gz kolla-ansible-89e91b69bde7e6f1242f6f167e77e14d7c30521a.zip | |
cmd: Extract methods to allow import from external
When methods for passwords generation and merge are
extracted then external apps and scripts can use
those methods without resolving to subprocess execution
or injecting sys.argv.
Change-Id: I99aff7852180534129fa36859075306eea776ba9
Signed-off-by: Maciej Kucia <maciej@kucia.net>
| -rwxr-xr-x | kolla_ansible/cmd/genpwd.py | 73 | ||||
| -rwxr-xr-x | kolla_ansible/cmd/mergepwd.py | 23 |
2 files changed, 53 insertions, 43 deletions
diff --git a/kolla_ansible/cmd/genpwd.py b/kolla_ansible/cmd/genpwd.py index 366964df7..c4573e999 100755 --- a/kolla_ansible/cmd/genpwd.py +++ b/kolla_ansible/cmd/genpwd.py @@ -54,6 +54,44 @@ def generate_RSA(bits=4096): return private_key, public_key +def genpwd(passwords_file, length, uuid_keys, ssh_keys, blank_keys, + fernet_keys, hmac_md5_keys): + with open(passwords_file, 'r') as f: + passwords = yaml.safe_load(f.read()) + + for k, v in passwords.items(): + if (k in ssh_keys and + (v is None + or v.get('public_key') is None + and v.get('private_key') is None)): + private_key, public_key = generate_RSA() + passwords[k] = { + 'private_key': private_key, + 'public_key': public_key + } + continue + if v is None: + if k in blank_keys and v is None: + continue + if k in uuid_keys: + passwords[k] = uuidutils.generate_uuid() + elif k in hmac_md5_keys: + passwords[k] = (hmac.new( + uuidutils.generate_uuid().encode(), ''.encode(), md5) + .hexdigest()) + elif k in fernet_keys: + passwords[k] = fernet.Fernet.generate_key() + else: + passwords[k] = ''.join([ + random.SystemRandom().choice( + string.ascii_letters + string.digits) + for n in range(length) + ]) + + with open(passwords_file, 'w') as f: + f.write(yaml.safe_dump(passwords, default_flow_style=False)) + + def main(): parser = argparse.ArgumentParser() parser.add_argument( @@ -91,40 +129,9 @@ def main(): # length of password length = 40 - with open(passwords_file, 'r') as f: - passwords = yaml.safe_load(f.read()) - - for k, v in passwords.items(): - if (k in ssh_keys and - (v is None - or v.get('public_key') is None - and v.get('private_key') is None)): - private_key, public_key = generate_RSA() - passwords[k] = { - 'private_key': private_key, - 'public_key': public_key - } - continue - if v is None: - if k in blank_keys and v is None: - continue - if k in uuid_keys: - passwords[k] = uuidutils.generate_uuid() - elif k in hmac_md5_keys: - passwords[k] = (hmac.new( - uuidutils.generate_uuid().encode(), ''.encode(), md5) - .hexdigest()) - elif k in fernet_keys: - passwords[k] = fernet.Fernet.generate_key() - else: - passwords[k] = ''.join([ - random.SystemRandom().choice( - string.ascii_letters + string.digits) - for n in range(length) - ]) + genpwd(passwords_file, length, uuid_keys, ssh_keys, blank_keys, + fernet_keys, hmac_md5_keys) - with open(passwords_file, 'w') as f: - f.write(yaml.safe_dump(passwords, default_flow_style=False)) if __name__ == '__main__': main() diff --git a/kolla_ansible/cmd/mergepwd.py b/kolla_ansible/cmd/mergepwd.py index ea3d12877..4c697629a 100755 --- a/kolla_ansible/cmd/mergepwd.py +++ b/kolla_ansible/cmd/mergepwd.py @@ -16,24 +16,27 @@ import argparse import yaml -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--old", help="old password file", required=True) - parser.add_argument("--new", help="new password file", required=True) - parser.add_argument("--final", help="merged password file", required=True) - args = parser.parse_args() - - with open(args.old, "r") as old_file: +def mergepwd(old, new, final): + with open(old, "r") as old_file: old_passwords = yaml.safe_load(old_file) - with open(args.new, "r") as new_file: + with open(new, "r") as new_file: new_passwords = yaml.safe_load(new_file) new_passwords.update(old_passwords) - with open(args.final, "w") as destination: + with open(final, "w") as destination: yaml.safe_dump(new_passwords, destination, default_flow_style=False) +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--old", help="old password file", required=True) + parser.add_argument("--new", help="new password file", required=True) + parser.add_argument("--final", help="merged password file", required=True) + args = parser.parse_args() + mergepwd(args.old, args.new, args.final) + + if __name__ == '__main__': main() |
