def render_credential_template(cls): global CRED_VAR_NAME_MAP, CRED_FILES LOG.debug("Rendering {} credential template".format(cls.__name__)) if not isinstance(cls, CredentialType): raise TypeError("{} is not of type {}".format(cls, CredentialType)) user_attrs = cls.get_user_attrs() user_attrs["description"] = cls.__doc__ var_name = "BP_CRED_{}".format(get_valid_identifier(cls.__name__)) file_name = "{}_{}".format(var_name, user_attrs["type"]) file_loc = os.path.join(get_local_dir(), file_name) # Storing empty value in the file with open(file_loc, "w+") as fd: fd.write("") user_attrs["var_name"] = var_name user_attrs["value"] = file_name if user_attrs.get("editables", {}): user_attrs["editables"] = user_attrs["editables"].get_dict() # update the map CRED_VAR_NAME_MAP[user_attrs["name"]] = var_name CRED_FILES.append(file_name) text = render_template("credential.py.jinja2", obj=user_attrs) return text.strip()
def get_secret_var_val(entity_context): global SECRET_VAR_FILES SECRET_VAR_FILES.append(entity_context) file_location = os.path.join(get_local_dir(), entity_context) with open(file_location, "w+") as fd: fd.write("") # Replace read_local_file by a constant return entity_context
def render_bp_file_template(cls, with_secrets=False, metadata_obj=None): if not isinstance(cls, BlueprintType): raise TypeError("{} is not of type {}".format(cls, BlueprintType)) user_attrs = cls.get_user_attrs() user_attrs["name"] = cls.__name__ user_attrs["description"] = cls.__doc__ # Find default cred default_cred = cls.default_cred default_cred_name = getattr(default_cred, "name", "") or getattr( default_cred, "__name__", "") credential_list = [] for index, cred in enumerate(cls.credentials): cred_name = getattr(cred, "name", "") or cred.__name__ if default_cred_name and cred_name == default_cred_name: cred.default = True credential_list.append(render_credential_template(cred)) # Map to store the [Name: Rendered template for entity] entity_name_text_map = {} # Edges map to store the edges (dependencies) between entities entity_edges = {} for service in cls.services: entity_name_text_map[service.get_ref().name] = service # Edge from services to other entities for dep in service.dependencies: add_edges(entity_edges, dep.get_ref().name, service.get_ref().name) downloadable_img_list = [] vm_images = [] for package in cls.packages: if getattr(package, "__kind__") == "app_package": entity_name_text_map[package.get_ref().name] = package # Edge from package to service for dep in package.services: add_edges(entity_edges, dep.get_ref().name, package.get_ref().name) else: downloadable_img_list.append( render_vm_disk_package_template(package)) vm_images.append(package.get_ref().name) # Printing all the downloadable images at the top, so ignore its edges for substrate in cls.substrates: entity_name_text_map[substrate.get_ref().name] = substrate deployments = [] for profile in cls.profiles: entity_name_text_map[profile.get_ref().name] = profile # Deployments deployments.extend(profile.deployments) for dep in deployments: add_edges(entity_edges, dep.get_ref().name, profile.get_ref().name) for deployment in deployments: entity_name_text_map[deployment.get_ref().name] = deployment # Edges from deployment to package for dep in deployment.packages: add_edges(entity_edges, dep.get_ref().name, deployment.get_ref().name) # Edges from deployment to substrate add_edges(entity_edges, deployment.substrate.get_ref().name, deployment.get_ref().name) # Other dependencies for dep in deployment.dependencies: add_edges(entity_edges, dep.get_ref().name, deployment.get_ref().name) # Getting the local files used for secrets secret_files = get_secret_variable_files() secret_files.extend(get_cred_files()) if with_secrets: # Fill the secret if flag is set if secret_files: click.secho("Enter the value to be used in secret files") for file_name in secret_files: secret_val = click.prompt("\nValue for {}".format(file_name), default="", show_default=False) file_loc = os.path.join(get_local_dir(), file_name) with open(file_loc, "w+") as fd: fd.write(secret_val) dependepent_entities = [] dependepent_entities = get_ordered_entities(entity_name_text_map, entity_edges) # Rendering templates for k, v in enumerate(dependepent_entities): if isinstance(v, ServiceType): dependepent_entities[k] = render_service_template(v) elif isinstance(v, PackageType): dependepent_entities[k] = render_package_template(v) elif isinstance(v, ProfileType): dependepent_entities[k] = render_profile_template(v) elif isinstance(v, DeploymentType): dependepent_entities[k] = render_deployment_template(v) elif isinstance(v, SubstrateType): dependepent_entities[k] = render_substrate_template( v, vm_images=vm_images) blueprint = render_blueprint_template(cls) # Rendere blueprint metadata metadata_str = render_metadata_template(metadata_obj) user_attrs.update({ "secret_files": secret_files, "credentials": credential_list, "vm_images": downloadable_img_list, "dependent_entities": dependepent_entities, "blueprint": blueprint, "metadata": metadata_str, }) text = render_template("bp_file_helper.py.jinja2", obj=user_attrs) return text.strip()