def _parser_callback(args): if args.instance_path and not path.isdir(args.instance_path): raise argparse.ArgumentTypeError( "Directory {} is not a valid path!".format(args.instance_path)) storage = Storage.create(args.instance_path) status = info(None, storage)["status"] if not args.force and storage.exists("instances"): if status == "initialized": print( "Running notify without previously running deploy might have unexpected consequences." ) question = prompt_yes_no_question() if not question: return 0 elif status in ("deploying", "undeploying"): print( "The project is in the middle of some other operation. Please try again after some time." ) return 0 elif status == "undeployed": print( "Running notify in an undeployed project might have unexpected consequences." ) question = prompt_yes_no_question() if not question: return 0 elif status == "error": print( "Running notify after a deployment with an error might have unexpected consequences." ) question = prompt_yes_no_question() if not question: return 0 if not args.force and not args.trigger: print( "You have not specified which policy trigger to use (with --trigger/-t or --event/-e) " "and in this case all the triggers will be invoked which might not be what you want." ) question = prompt_yes_no_question() if not question: return 0 # read the notification file and the pass its contents to the library function notification_file_contents = Path( args.notification.name).read_text() if args.notification else None try: notify(storage, args.verbose, args.trigger, notification_file_contents) except ParseError as e: print("{}: {}".format(e.loc, e)) return 1 except DataError as e: print(str(e)) return 1 return 0
def _parser_callback(args): if args.instance_path and not path.isdir(args.instance_path): raise argparse.ArgumentTypeError( "Directory {} is not a valid path!".format(args.instance_path)) if args.workers < 1: print("{} is not a positive number!".format(args.workers)) return 1 storage = Storage.create(args.instance_path) status = info(None, storage)["status"] if storage.exists("instances"): if args.resume and status == "error": if not args.force: print( "The resume undeploy option might have unexpected consequences on the already " "undeployed blueprint.") question = prompt_yes_no_question() if not question: return 0 elif status == "initialized": print( "The project is initialized. You have to deploy it first to be able to run undeploy." ) return 0 elif status == "deploying": print( "The project is currently deploying. Please try again after the deployment." ) return 0 elif status == "undeployed": print("All instances have already been undeployed.") return 0 elif status == "error": print( "The instance model already exists. Use --resume/-r option to continue current undeployment process." ) return 0 try: undeploy(storage, args.verbose, args.workers) except ParseError as e: print("{}: {}".format(e.loc, e)) return 1 except DataError as e: print(str(e)) return 1 return 0
def _parser_callback(args): if args.instance_path and not path.isdir(args.instance_path): raise argparse.ArgumentTypeError( "Directory {0} is not a valid path!".format(args.instance_path)) storage = Storage.create(args.instance_path) if args.workers < 1: print("{0} is not a positive number!".format(args.workers)) return 1 delete_existing_state = False if storage.exists("instances"): if args.resume: if not args.force: print("The resume deploy option might have unexpected " "consequences on the already deployed blueprint.") question = prompt_yes_no_question() if not question: return 0 elif args.clean_state: if args.force: delete_existing_state = True else: print("The clean state deploy option might have unexpected " "consequences on the already deployed blueprint.") question = prompt_yes_no_question() if question: delete_existing_state = True else: return 0 else: print("The instance model already exists. Use --resume to " "continue or --clean-state to delete current deployment " "state and start over the deployment.") return 0 if args.template: service_template = args.template.name else: if storage.exists("root_file"): service_template = storage.read("root_file") else: print("CSAR or template root file does not exist. " "Maybe you have forgotten to initialize it.") return 1 try: if args.inputs: inputs = yaml.safe_load(args.inputs) else: inputs = None except Exception as e: print("Invalid inputs: {}".format(e)) return 1 try: deploy(service_template, inputs, storage, args.verbose, args.workers, delete_existing_state) except ParseError as e: print("{}: {}".format(e.loc, e)) return 1 except DataError as e: print(str(e)) return 1 return 0
def _parser_callback(args): # pylint: disable=too-many-statements if args.instance_path and not path.isdir(args.instance_path): raise argparse.ArgumentTypeError( f"Directory {args.instance_path} is not a valid path!") if args.workers < 1: print(f"{args.workers} is not a positive number!") return 1 storage = Storage.create(args.instance_path) status = info(None, storage)["status"] delete_existing_state = False if storage.exists("instances"): if args.resume and status == "error": if not args.force: print( "The resume deploy option might have unexpected consequences on the already deployed blueprint." ) question = prompt_yes_no_question() if not question: return 0 elif args.clean_state: if args.force: delete_existing_state = True else: print("The clean state deploy option might have unexpected " "consequences on the already deployed blueprint.") question = prompt_yes_no_question() if question: delete_existing_state = True else: return 0 elif status == "initialized": print( "The project is initialized. You have to deploy it first to be able to run undeploy." ) return 0 elif status == "undeploying": print( "The project is currently undeploying. Please try again after the undeployment." ) return 0 elif status == "deployed": print("All instances have already been deployed.") return 0 elif status == "error": print( "The instance model already exists. Use --resume/-r to continue or --clean-state/-c to delete " "current deployment state and start over the deployment.") return 0 if args.template: csar_or_st_path = PurePath(args.template.name) else: if storage.exists("root_file"): csar_or_st_path = PurePath(storage.read("root_file")) else: print( "CSAR or template root file does not exist. Maybe you have forgotten to initialize it." ) return 1 try: if args.inputs: inputs = yaml.safe_load(args.inputs) else: inputs = None except yaml.YAMLError as e: print(f"Invalid inputs: {e}") return 1 try: if is_zipfile(csar_or_st_path): deploy_compressed_csar(csar_or_st_path, inputs, storage, args.verbose, args.workers, delete_existing_state) else: deploy_service_template(csar_or_st_path, inputs, storage, args.verbose, args.workers, delete_existing_state) except ParseError as e: print(f"{e.loc}: {e}") return 1 except DataError as e: print(str(e)) return 1 return 0