From 2fbe8f8ceb04a5b57975b82c1abdbff5ece4e019 Mon Sep 17 00:00:00 2001 From: kisarkar Date: Wed, 26 May 2021 22:38:57 +0530 Subject: [PATCH] Moving CLI config to API Platform --- .build/pre_build.py | 14 ++++------ user-sync.spec | 5 +++- user_sync/app.py | 67 ++++++++++++++++++++++++++++++++++++++------- 3 files changed, 66 insertions(+), 20 deletions(-) diff --git a/.build/pre_build.py b/.build/pre_build.py index d144527de..c9e48baca 100644 --- a/.build/pre_build.py +++ b/.build/pre_build.py @@ -21,6 +21,7 @@ import os import shutil from backports import configparser +from distutils.dir_util import copy_tree def cd(): @@ -29,15 +30,8 @@ def cd(): def bundle_example_config(subdir): examples_dir = os.path.join('examples', subdir) - files = [os.path.join(examples_dir, f) for f in os.listdir(examples_dir) if - os.path.isfile(os.path.join(examples_dir, f))] - bundle_dir = os.path.join('user_sync', 'resources', 'examples') - if not os.path.exists(bundle_dir): - os.mkdir(bundle_dir) - for f in files: - dest = os.path.join(bundle_dir, os.path.split(f)[-1]) - shutil.copy(f, dest) - + bundle_dir = os.path.join('user_sync', 'resources', 'examples', subdir) + copy_tree(examples_dir, bundle_dir) def bundle_feature_flag_config(): default_cfg_path = os.path.join('user_sync', 'resources', 'default_flags.cfg') @@ -64,4 +58,6 @@ def bundle_feature_flag_config(): if __name__ == '__main__': cd() bundle_example_config('config files - basic') + bundle_example_config('config files - custom attributes and mappings') bundle_example_config('sign') + bundle_example_config('csv inputs - user and remove lists') diff --git a/user-sync.spec b/user-sync.spec index 301e1a943..3273b5ca7 100644 --- a/user-sync.spec +++ b/user-sync.spec @@ -8,7 +8,10 @@ a = Analysis(['user_sync/app.py'], ('user_sync/resources/*.cfg', 'resources'), ('user_sync/resources/manual_url', 'resources'), ('user_sync/resources/README.md', 'resources'), - ('user_sync/resources/examples/*', 'resources/examples'), + ('user_sync/resources/examples/config files - basic/*', 'resources/examples/config files - basic'), + ('user_sync/resources/examples/config files - custom attributes and mappings/*', 'resources/examples/config files - custom attributes and mappings'), + ('user_sync/resources/examples/sign/*', 'resources/examples/sign'), + ('user_sync/resources/examples/csv inputs - user and remove lists/*', 'resources/examples/csv inputs - user and remove lists'), ('user_sync/resources/shell_scripts/win', 'resources/shell_scripts/win'), ('user_sync/resources/shell_scripts/linux', 'resources/shell_scripts/linux'), ], diff --git a/user_sync/app.py b/user_sync/app.py index b891bb422..c8dda0212 100644 --- a/user_sync/app.py +++ b/user_sync/app.py @@ -228,7 +228,16 @@ def init(ctx): sync = 'user-sync-config.yml' umapi = 'connector-umapi.yml' ldap = 'connector-ldap.yml' - ctx.forward(example_config, root=sync, umapi=umapi, ldap=ldap) + okta = 'connector-okta.yml' + csv = 'connector-csv.yml' + console = 'connector-adobe-console.yml' + extension = 'extension-config.yml' + remove_list = 'remove-list.csv' + users_file_custom = 'users-file-with-custom-attributes-and-mappings.csv' + users_file = 'users-file.csv' + ctx.forward(example_config, root=sync, umapi=umapi, ldap=ldap, + okta=okta, csv=csv, console=console, extension=extension, + remove_list=remove_list, users_file_custom=users_file_custom, users_file=users_file) @main.command(short_help="Generate invocation scripts") @@ -259,21 +268,34 @@ def shell_scripts(platform): prompt='UMAPI Config Filename', default='connector-umapi.yml') @click.option('--ldap', help="Filename of LDAP credential config file", prompt='LDAP Config Filename', default='connector-ldap.yml') -def example_config(**kwargs): +@click.option('--examples', type=bool, help="Generate all or selected config files", required=False, default=None) +def example_config(examples=False, **kwargs): """Generate example configuration files""" res_files = { 'root': os.path.join('examples', 'user-sync-config.yml'), 'umapi': os.path.join('examples', 'connector-umapi.yml'), 'ldap': os.path.join('examples', 'connector-ldap.yml'), + 'okta': os.path.join('examples', 'config files - basic', 'connector-okta.yml'), + 'csv': os.path.join('examples', 'config files - basic', 'connector-csv.yml'), + 'console': os.path.join('examples', 'config files - basic', 'connector-adobe-console.yml'), + 'extension': os.path.join('examples', 'config files - custom attributes and mappings', 'extension-config.yml'), + 'remove_list': os.path.join('examples', 'csv inputs - user and remove lists', 'remove-list.csv'), + 'users_file_custom': os.path.join('examples', 'csv inputs - user and remove lists', 'users-file-with-custom-attributes-and-mappings.csv'), + 'users_file': os.path.join('examples', 'csv inputs - user and remove lists', 'users-file.csv') } - for k, fname in kwargs.items(): - target = Path.cwd() / fname + if not examples: + res_files = {config: kwargs[config] for config in res_files + if config in kwargs} + + for k, fname in res_files.items(): + target = Path(fname) assert k in res_files, "Invalid option specified" res_file = user_sync.resource.get_resource(res_files[k]) assert res_file is not None, "Resource file '{}' not found".format(res_files[k]) if target.exists() and not click.confirm('\nWarning - file already exists: \n{}\nOverwrite?'.format(target)): continue + os.makedirs(os.path.dirname(target), exist_ok=True) click.echo("Generating file '{}'".format(fname)) with open(res_file, 'r') as file: content = file.read() @@ -285,14 +307,39 @@ def example_config(**kwargs): @click.help_option('-h', '--help') @click.option('--filename', help="Filename of Sign Sync config", prompt='Sign Sync Config Filename', default='connector-sign-sync.yml') -def example_config_sign(filename): +@click.option('--root', help="Filename of root sign sync config file", + prompt='Main Config Filename', default='sign-sync-config.yml') +@click.option('--sign', help="Filename of Sign Sync config", + prompt='Sign Sync Config Filename', default='connector-sign.yml') +@click.option('--ldap', help="Filename of LDAP credential config file", + prompt='LDAP Config Filename', default='connector-ldap.yml') +@click.option('--examples', type=bool, help="Generate all or selected config files", + required=False, default=None) +def example_config_sign(examples=False, **kwargs): """Generate Sign Sync Config""" - res_filename = os.path.join('examples', 'connector-sign-sync.yml') + res_files = { + 'root': os.path.join('examples', 'sign', 'sign-sync-config.yml'), + 'sign': os.path.join('examples', 'sign', 'connector-sign.yml'), + 'ldap': os.path.join('examples', 'sign', 'connector-ldap.yml'), + } - res_file = user_sync.resource.get_resource(res_filename) - assert res_file is not None, "Resource file '{}' not found".format(res_filename) - click.echo("Generating file '{}'".format(filename)) - shutil.copy(res_file, filename) + if not examples: + res_files = {config: kwargs[config] for config in res_files + if config in kwargs} + + for k, fname in res_files.items(): + target = Path.cwd() / fname + assert k in res_files, "Invalid option specified" + res_file = user_sync.resource.get_resource(res_files[k]) + assert res_file is not None, "Resource file '{}' not found".format(res_files[k]) + if target.exists() and not click.confirm('\nWarning - file already exists: \n{}\nOverwrite?'.format(target)): + continue + os.makedirs(os.path.dirname(target), exist_ok=True) + click.echo("Generating file '{}'".format(fname)) + with open(res_file, 'r') as file: + content = file.read() + with open(target, 'w') as file: + file.write(content) @main.command()