diff --git a/.gitignore b/.gitignore index 5b0f531..996d7d1 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ venv/ # programming languages *.pyc *.o + diff --git a/README.md b/README.md index 64e7e1e..490c9aa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +22321268

metarget-logo

diff --git a/cmds/cnv.py b/cmds/cnv.py index e51869a..21f9f03 100644 --- a/cmds/cnv.py +++ b/cmds/cnv.py @@ -66,11 +66,11 @@ def install(args): if installed_flag: color_print.debug( '{vuln} already installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) return color_print.debug( '{vuln} is going to be installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) color_print.debug('uninstalling current docker gadgets if applicable') DockerInstaller.uninstall(verbose=args.verbose) if not DockerInstaller.install_by_version( @@ -81,14 +81,14 @@ def install(args): else: color_print.debug( '{v} successfully installed'.format( - v=vuln['name'])) + v=vuln['name']), type=1) if vuln['class'] == 'kubernetes': if checkers.kubernetes_specified_installed( vuln['dependencies'], verbose=args.verbose): color_print.debug( '{vuln} already installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) return if not checkers.docker_installed(verbose=args.verbose): color_print.error( @@ -97,7 +97,7 @@ def install(args): 'you can run `metarget gadget install docker --version 18.03.1` to install one') color_print.debug( '{vuln} is going to be installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) color_print.debug('uninstalling current kubernetes if applicable') KubernetesInstaller.uninstall(verbose=args.verbose) temp_pod_network_cidr = args.pod_network_cidr if args.pod_network_cidr else config.cni_plugin_cidrs[ @@ -119,18 +119,18 @@ def install(args): else: color_print.debug( '{v} successfully installed'.format( - v=vuln['name'])) + v=vuln['name']), type=1) if vuln['class'] == 'kernel': if checkers.kernel_specified_installed( vuln['dependencies'], verbose=args.verbose): color_print.debug( '{vuln} already installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) return color_print.debug( '{vuln} is going to be installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) if not KernelInstaller.install_by_version( gadgets=vuln['dependencies'], verbose=args.verbose): @@ -140,9 +140,9 @@ def install(args): else: color_print.debug( '{v} successfully installed'.format( - v=vuln['name'])) + v=vuln['name']), type=1) # reboot - reboot = color_print.debug_input('reboot system now? (y/n) ') + reboot = color_print.debug_input('reboot system now? (y/n) ', type=1) if reboot == 'y' or reboot == 'Y': system_func.reboot_system(verbose=args.verbose) @@ -153,7 +153,7 @@ def install(args): verbose=args.verbose): color_print.debug( '{vuln} already installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) return if not checkers.docker_installed(verbose=args.verbose): color_print.error( @@ -163,7 +163,7 @@ def install(args): color_print.debug( '{vuln} is going to be installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) color_print.debug('uninstalling current kata-containers if applicable') KataContainersInstaller.uninstall(verbose=args.verbose) @@ -181,7 +181,7 @@ def install(args): else: color_print.debug( '{v} successfully installed'.format( - v=vuln['name'])) + v=vuln['name']), type=1) def remove(args): @@ -217,21 +217,21 @@ def remove(args): color_print.debug( '{vuln} is going to be removed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) if vuln['class'].startswith('docker'): DockerInstaller.uninstall(verbose=args.verbose) - color_print.debug('{v} successfully removed'.format(v=vuln['name'])) + color_print.debug('{v} successfully removed'.format(v=vuln['name']), type=2) if vuln['class'] == 'kubernetes': KubernetesInstaller.uninstall(verbose=args.verbose) - color_print.debug('{v} successfully removed'.format(v=vuln['name'])) + color_print.debug('{v} successfully removed'.format(v=vuln['name']), type=2) if vuln['class'] == 'kata-containers': if KataContainersInstaller.uninstall(verbose=args.verbose): color_print.debug( '{v} successfully removed'.format( - v=vuln['name'])) + v=vuln['name']), type=2) else: color_print.error('failed to remove {v}'.format(v=vuln['name'])) diff --git a/cmds/gadget.py b/cmds/gadget.py index 970815f..44e3471 100644 --- a/cmds/gadget.py +++ b/cmds/gadget.py @@ -42,7 +42,7 @@ def install(args): if checkers.docker_specified_installed(temp_gadgets): color_print.debug( '{gadget} with version {version} already installed'.format( - gadget=args.gadget, version=args.version)) + gadget=args.gadget, version=args.version), type=3) return color_print.debug('uninstalling current docker if applicable') DockerInstaller.uninstall(verbose=args.verbose) @@ -54,7 +54,7 @@ def install(args): else: color_print.debug( '{gadget} with version {version} successfully installed'.format( - gadget=args.gadget, version=args.version)) + gadget=args.gadget, version=args.version), type=1) if args.gadget == 'k8s': temp_gadgets = [ @@ -66,7 +66,7 @@ def install(args): temp_gadgets, verbose=args.verbose): color_print.debug( '{gadget} with version {version} already installed'.format( - gadget=args.gadget, version=args.version)) + gadget=args.gadget, version=args.version), type=3) return if not checkers.docker_installed(verbose=args.verbose): color_print.error( @@ -92,7 +92,7 @@ def install(args): else: color_print.debug( '{gadget} successfully installed'.format( - gadget=args.gadget)) + gadget=args.gadget), type=1) if args.gadget == 'kata': temp_gadgets = [ @@ -102,7 +102,7 @@ def install(args): temp_gadgets, kata_runtime_type=args.kata_runtime_type, verbose=args.verbose): color_print.debug( '{gadget} with version {version} already installed'.format( - gadget=args.gadget, version=args.version)) + gadget=args.gadget, version=args.version), type=3) return if not checkers.docker_installed(verbose=args.verbose): color_print.error( @@ -119,7 +119,7 @@ def install(args): else: color_print.debug( '{gadget} with version {version} (runtime type: {runtime_type}) successfully installed'.format( - gadget=args.gadget, version=args.version, runtime_type=args.kata_runtime_type)) + gadget=args.gadget, version=args.version, runtime_type=args.kata_runtime_type), type=1) if args.gadget == 'kernel': temp_gadgets = [ @@ -129,7 +129,7 @@ def install(args): temp_gadgets, verbose=args.verbose): color_print.debug( '{gadget} with version {version} already installed'.format( - gadget=args.gadget, version=args.version)) + gadget=args.gadget, version=args.version), type=3) return if not KernelInstaller.install_by_version( temp_gadgets, verbose=args.verbose): @@ -139,9 +139,9 @@ def install(args): else: color_print.debug( '{gadget} successfully installed'.format( - gadget=args.gadget)) + gadget=args.gadget), type=1) # reboot - reboot = color_print.debug_input('reboot system now? (y/n) ') + reboot = color_print.debug_input('reboot system now? (y/n) ', type=1) if reboot == 'y' or reboot == 'Y': system_func.reboot_system(verbose=args.verbose) @@ -160,17 +160,17 @@ def remove(args): DockerInstaller.uninstall(verbose=args.verbose) color_print.debug( '{gadget} successfully removed'.format( - gadget=args.gadget)) + gadget=args.gadget), type=2) if args.gadget == 'k8s': KubernetesInstaller.uninstall(verbose=args.verbose) color_print.debug( '{gadget} successfully removed'.format( - gadget=args.gadget)) + gadget=args.gadget), type=2) if args.gadget == 'kata': if KataContainersInstaller.uninstall(verbose=args.verbose): color_print.debug( '{gadget} successfully removed'.format( - gadget=args.gadget)) + gadget=args.gadget), type=2) else: color_print.error( 'failed to remove {gadget}'.format( @@ -182,9 +182,9 @@ def remove(args): if KernelInstaller.uninstall(temp_gadgets, verbose=args.verbose): color_print.debug( '{gadget} successfully removed'.format( - gadget=args.gadget)) + gadget=args.gadget), type=2) # reboot - reboot = color_print.debug_input('reboot system now? (y/n) ') + reboot = color_print.debug_input('reboot system now? (y/n) ', type=1) if reboot == 'y' or reboot == 'Y': system_func.reboot_system(verbose=args.verbose) else: diff --git a/cmds/internal.py b/cmds/internal.py index 3a6e805..440dc47 100644 --- a/cmds/internal.py +++ b/cmds/internal.py @@ -31,7 +31,7 @@ def deploy_vuln_resources_in_k8s( color_print.debug( '{vuln} is going to be installed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) yamls = [os.path.join(vuln['path'], dependency) for dependency in vuln['dependencies']['yamls']] # some appv need hostPath volumes @@ -86,7 +86,7 @@ def deploy_vuln_resources_in_k8s( 'failed to install {v}'.format( v=vuln['name'])) else: - color_print.debug('{v} successfully installed'.format(v=vuln['name'])) + color_print.debug('{v} successfully installed'.format(v=vuln['name']), tyype=1) def delete_vuln_resources_in_k8s(vuln, verbose=False): @@ -104,7 +104,7 @@ def delete_vuln_resources_in_k8s(vuln, verbose=False): """ color_print.debug( '{vuln} is going to be removed'.format( - vuln=vuln['name'])) + vuln=vuln['name']), type=3) yamls = [os.path.join(vuln['path'], dependency) for dependency in vuln['dependencies']['yamls']] diff --git a/core/env_managers/installer.py b/core/env_managers/installer.py index f0a754a..fbe2aec 100644 --- a/core/env_managers/installer.py +++ b/core/env_managers/installer.py @@ -175,7 +175,7 @@ def _pull_image(cls, image, mappings=None, verbose=False): except subprocess.CalledProcessError: return False else: - color_print.debug('%s already pulled' % image) + color_print.debug('%s already pulled' % image, 3) @classmethod def _pull_domestic_images(cls, images, ori_prefix, @@ -209,7 +209,7 @@ def _pull_domestic_image(cls, image, ori_prefix, cls._pull_image(temp_image, verbose=verbose) cls._tag_image(temp_image, image) else: - color_print.debug('%s already pulled' % image) + color_print.debug('%s already pulled' % image, 3) @classmethod def _tag_images(cls, old_names, new_names): diff --git a/utils/checkers.py b/utils/checkers.py index 2418e9d..300e087 100644 --- a/utils/checkers.py +++ b/utils/checkers.py @@ -51,7 +51,7 @@ def kubernetes_installed(verbose=False): stdout=subprocess.PIPE, stderr=stderr, check=True) - color_print.debug('kubernetes already installed') + color_print.debug('kubernetes already installed', type=3) return True except (FileNotFoundError, AttributeError, IndexError, subprocess.CalledProcessError): return False @@ -74,7 +74,7 @@ def docker_installed(verbose=False): stdout=subprocess.PIPE, stderr=stderr, check=True) - color_print.debug('docker already installed') + color_print.debug('docker already installed', type=3) return True except (FileNotFoundError, AttributeError, IndexError, subprocess.CalledProcessError): return False diff --git a/utils/color_print.py b/utils/color_print.py index 0ed79f2..1da6709 100644 --- a/utils/color_print.py +++ b/utils/color_print.py @@ -9,10 +9,33 @@ GREEN_STR = "\033[32m%s\033[0m" YELLOW_STR = "\033[33mwarning: %s\033[0m" +# Add some new color print +BLUE_PROMPT = "\033[34m[\033[0m%s\033[34m]\033[0m" +TYPE_PLUS_ = "\033[32m%s\033[0m" +TYPE_RMVS_ = "\033[31m%s\033[0m" +TYPE_USED_ = "\033[33m%s\033[0m" +TYPE_IMPR_ = "\033[95m%s\033[0m" -def debug(message, mode=0): + +# Add some prompts related the info +def debug(message, mode=0, type=0): if mode == 0: - print(GREEN_STR % message) + if type == 0: + # TYPE:0 default mode without any prompt message + print(GREEN_STR % message) + elif type == 1: + # TYPE:1 with prompt message + + # Prompt: successfully installed + print(BLUE_PROMPT % (TYPE_PLUS_ % '+') + GREEN_STR % message) + elif type == 2: + # TYPE:2 with prompt message - + # Prompt: successfully uninstalled/remove + print(BLUE_PROMPT % (TYPE_RMVS_ % '-') + GREEN_STR % message) + elif type == 3: + # TYPE:3 with prompt message * + # Prompt: message about already installed + # Prompt: going to install/remove + print(BLUE_PROMPT % (TYPE_USED_ % '*') + GREEN_STR % message) elif mode == 1: print(RED_STR % message) elif mode == 2: @@ -21,10 +44,13 @@ def debug(message, mode=0): print(message) return - -def debug_input(message, mode=0): +# Add prompts related to important confirmations +def debug_input(message, mode=0, type=0): if mode == 0: - res = input(GREEN_STR % message) + if type == 0: + res = input(GREEN_STR % message) + elif type == 1: + res = input(BLUE_PROMPT % (TYPE_IMPR_ % "!") + GREEN_STR % message) elif mode == 1: res = input(RED_STR % message) elif mode == 2: @@ -50,3 +76,4 @@ def warning(message): if __name__ == '__main__': debug('hello, world') debug_input('ready to reboot system? (y/n) ') + debug_input('ready to reboot system? (y/n) ', type=1)