Example #1
0
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()
Example #2
0
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
Example #3
0
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()