def deploy(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(Path(args.instance_path).joinpath( ".opera")) if args.instance_path else Storage(Path(".opera")) storage.write(args.csar.name, "root_file") # TODO(@tadeboro): This should be part of the init command that we do not # have yet. try: inputs = yaml.safe_load(args.inputs) if args.inputs else {} storage.write_json(inputs, "inputs") except Exception as e: print("Invalid inputs: {}".format(e)) return 1 try: ast = tosca.load(Path.cwd(), PurePath(args.csar.name)) template = ast.get_template(inputs) topology = template.instantiate(storage) topology.deploy() except ParseError as e: print("{}: {}".format(e.loc, e)) return 1 except DataError as e: print(str(e)) return 1 return 0
def init_compressed_csar(csar_name: str, inputs: typing.Optional[dict], storage: Storage, clean_storage: bool): if storage.exists("root_file"): if clean_storage: storage.remove_all() else: print("Looks like service template or CSAR has already been initialized. " "Use the --clean/-c flag to clear the storage.") return if inputs is None: inputs = {} storage.write_json(inputs, "inputs") csars_dir = Path(storage.path) / "csars" csars_dir.mkdir(exist_ok=True) csar = CloudServiceArchive.create(PurePath(csar_name)) csar.validate_csar() tosca_service_template = csar.get_entrypoint() # unzip csar and save the path to storage csar_dir = csars_dir / Path("csar") ZipFile(csar_name, "r").extractall(csar_dir) csar_tosca_service_template_path = csar_dir / tosca_service_template storage.write(str(csar_tosca_service_template_path), "root_file") # try to initiate service template from csar ast = tosca.load(Path(csar_dir), Path(tosca_service_template)) template = ast.get_template(inputs) template.instantiate(storage)
def update(storage_old: Storage, workdir_old: str, storage_new: Storage, workdir_new: str, instance_comparer: InstanceComparer, instance_diff: Diff, verbose_mode: bool, num_workers: int, overwrite: bool): template_old = get_template(storage_old) template_new = get_template(storage_new) topology_old = template_old.instantiate(storage_old) topology_new = template_new.instantiate(storage_new) if verbose_mode: print(format_outputs(instance_diff.outputs(), "json")) instance_comparer.prepare_update(topology_old, topology_new, instance_diff) topology_old.undeploy(verbose_mode, workdir_old, num_workers) topology_old.write_all() if overwrite: # swap storage topology_new.set_storage(storage_old) # rewrite inputs and root file storage_old.write_json(storage_new.read_json("inputs"), "inputs") storage_old.write(storage_new.read("root_file"), "root_file") topology_new.write_all() topology_new.deploy(verbose_mode, workdir_new, num_workers)
def deploy(service_template: str, inputs: typing.Optional[dict], storage: Storage, verbose_mode: bool, num_workers: int, delete_existing_state: bool): """ :raises ParseError: :raises DataError: """ if delete_existing_state: storage.remove("instances") if inputs is None: if storage.exists("inputs"): inputs = yaml.safe_load(storage.read("inputs")) else: inputs = {} storage.write_json(inputs, "inputs") storage.write(service_template, "root_file") workdir = str(Path.cwd()) if storage.exists("csars"): csar_dir = Path(storage.path) / "csars" / "csar" workdir = str(csar_dir) ast = tosca.load(Path(csar_dir), PurePath(service_template).relative_to(csar_dir)) else: ast = tosca.load(Path.cwd(), PurePath(service_template)) template = ast.get_template(inputs) topology = template.instantiate(storage) topology.deploy(verbose_mode, workdir, num_workers)
def deploy_compressed_csar(csar_path: PurePath, inputs: typing.Optional[dict], storage: Storage, verbose_mode: bool, num_workers: int, delete_existing_state: bool): if delete_existing_state: storage.remove("instances") if inputs is None: inputs = {} storage.write_json(inputs, "inputs") csars_dir = Path(storage.path) / "csars" csars_dir.mkdir(exist_ok=True) csar = CloudServiceArchive.create(csar_path) csar.validate_csar() tosca_service_template = csar.get_entrypoint() # unzip csar, save the path to storage and set workdir csar_dir = csars_dir / Path("csar") ZipFile(csar_path, "r").extractall(csar_dir) # pylint: disable=consider-using-with csar_tosca_service_template_path = csar_dir / tosca_service_template storage.write(str(csar_tosca_service_template_path), "root_file") workdir = str(csar_dir) # initialize service template from CSAR and deploy ast = tosca.load(Path(csar_dir), Path(tosca_service_template)) template = ast.get_template(inputs) topology = template.instantiate(storage) topology.deploy(verbose_mode, workdir, num_workers)
def deploy_service_template(service_template_path: PurePath, inputs: typing.Optional[dict], storage: Storage, verbose_mode: bool, num_workers: int, delete_existing_state: bool): if delete_existing_state: storage.remove("instances") if inputs is None: if storage.exists("inputs"): inputs = yaml.safe_load(storage.read("inputs")) else: inputs = {} storage.write_json(inputs, "inputs") storage.write(str(service_template_path), "root_file") # set workdir and check if service template/CSAR has been initialized workdir = Path(service_template_path.parent) if storage.exists("csars"): csar_dir = Path(storage.path) / "csars" / "csar" workdir = csar_dir ast = tosca.load(workdir, service_template_path.relative_to(csar_dir)) else: ast = tosca.load(workdir, PurePath(service_template_path.name)) # initialize service template and deploy template = ast.get_template(inputs) topology = template.instantiate(storage) topology.deploy(verbose_mode, workdir, num_workers)
def initialize_service_template(service_template: str, inputs: typing.Optional[dict], storage: Storage): if inputs is None: inputs = {} storage.write_json(inputs, "inputs") storage.write(service_template, "root_file") ast = tosca.load(Path.cwd(), PurePath(service_template)) template = ast.get_template(inputs) template.instantiate(storage)
def init_service_template(service_template: str, inputs: typing.Optional[dict], storage: Storage, clean_storage: bool): if storage.exists("root_file"): if clean_storage: storage.remove_all() else: print("Looks like service template or CSAR has already been initialized. " "Use --clean/-c flag to clear the storage.") return if inputs is None: inputs = {} storage.write_json(inputs, "inputs") storage.write(service_template, "root_file") ast = tosca.load(Path.cwd(), PurePath(service_template)) template = ast.get_template(inputs) template.instantiate(storage)
def initialize_compressed_csar(csar_name: str, inputs: typing.Optional[dict], storage: Storage): if inputs is None: inputs = {} storage.write_json(inputs, "inputs") csars_dir = Path(storage.path) / "csars" csars_dir.mkdir(exist_ok=True) # validate csar csar = CloudServiceArchive(csar_name, csars_dir) tosca_service_template = csar.validate_csar() # unzip csar and save the path to storage csar_dir = csars_dir / Path("csar") ZipFile(csar_name, 'r').extractall(csar_dir) csar_tosca_service_template_path = csar_dir / tosca_service_template storage.write(str(csar_tosca_service_template_path), "root_file") # try to initiate service template from csar ast = tosca.load(Path(csar_dir), Path(tosca_service_template)) template = ast.get_template(inputs) template.instantiate(storage)