Finding Blueprints Containing a Specific Resource, Service or App
The following Python scripts utilize the CloudShell Automation API to print a list of the blueprints that have a specific component and should be run from an IDE that can access the Quali Server.
In this article:
Print blueprints that have a resource
To use this script, replace resource name with the name of the resource and set the CloudShell details.
from cloudshell.api.cloudshell_api import CloudShellAPISession
from pprint import pprint
# specify target resource name
TARGET_RESOURCE_NAME = "resource name"
# specify api session details
user = "admin"
password = "admin"
server = "localhost"
domain = "Global"
api = CloudShellAPISession(host=server, username=user, password=password, domain=domain)
def is_resource_list_in_blueprint(api, blueprint_name, target_resource_name):
    """
    search current blueprint resources for presence of the Target Resource
    :param CloudShellAPISession api:
    :param str blueprint_name:
    :param str target_resource_name:
    :return:
    """
    details = api.GetTopologyDetails(blueprint_name)
    bp_resources = details.Resources
    for curr_resource in bp_resources:
        if curr_resource.Name == target_resource_name:
            return True
    return False
all_blueprints = api.GetTopologiesByCategory().Topologies
target_blueprints = [bp_name for bp_name in all_blueprints
                     if is_resource_list_in_blueprint(api, bp_name, TARGET_RESOURCE_NAME)]
if not target_blueprints:
    print("No blueprints in system with target resource")
else:
    print("=== Target Blueprints containing '{}' ===".format(TARGET_RESOURCE_NAME))
    pprint(target_blueprints)
    # add to text file
    with open('target_blueprints.txt', 'w') as f:
        for bp in target_blueprints:
            print >> f, bp
Print blueprints that have a service
To use this script, replace service alias with the alias of the service and set the CloudShell details.
from cloudshell.api.cloudshell_api import CloudShellAPISession
# set list of service "Alias"
TARGET_SERVICES = ["service alias"]
# api session details
user = "admin"
password = "admin"
server = "localhost"
domain = "Global"
api = CloudShellAPISession(host=server, username=user, password=password, domain=domain)
def is_resource_list_in_blueprint(api, blueprint_name, target_service_names):
    """
    search current blueprint resources for presence of the Target Resource
    :param CloudShellAPISession api:
    :param str blueprint_name:
    :param [str] target_service_names:
    :return:
    """
    details = api.GetTopologyDetails(blueprint_name)
    bp_services = details.Services
    bp_service_names = [service.Alias for service in bp_services]
    for service_name in target_service_names:
        for bp_service_name in bp_service_names:
            if service_name == bp_service_name:
                return True
            else:
                continue
all_blueprints = api.GetTopologiesByCategory().Topologies
target_blueprints = [bp_name for bp_name in all_blueprints
                     if is_resource_list_in_blueprint(api, bp_name, TARGET_SERVICES)]
if not target_blueprints:
    print("No blueprints in system with target services")
else:
    print("=== Target Blueprints containing '{}' resources ===".format(TARGET_SERVICES))
    print(target_blueprints)
    # add blueprints to text file
    with open('target_blueprints.txt', 'w') as f:
        for bp in target_blueprints:
            print >> f, bpPrint blueprints containing Apps with a deployment type based on a specific cloud provider resource
This script looks for blueprints with Apps that contain a deployment path from a particular cloud provider resource. To use, replace cloud provider resource name with the name of the cloud provider resource and set the CloudShell details.
from cloudshell.api.cloudshell_api import CloudShellAPISession
from pprint import pprint
from timeit import default_timer
# set list of target resources
TARGET_CLOUD_PROVIDER_RESOURCE = "cloud provider resource name"
# api session details
user = "admin"
password = "admin"
server = "localhost"
domain = "Global"
api = CloudShellAPISession(host=server, username=user, password=password, domain=domain)
def is_resource_list_in_blueprint(api, blueprint_name, target_cloud_provider):
    """
    search current blueprint resources for presence of the Target Resource
    :param CloudShellAPISession api:
    :param str blueprint_name:
    :param str target_cloud_provider:
    :return:
    """
    details = api.GetTopologyDetails(blueprint_name)
    bp_apps = details.Apps
    for curr_app in bp_apps:
        deployment_paths = curr_app.DeploymentPaths
        for dp in deployment_paths:
            curr_cloud_provider = dp.DeploymentService.CloudProvider
            if curr_cloud_provider == target_cloud_provider:
                return True
    return False
start = default_timer()
all_blueprints = api.GetTopologiesByCategory().Topologies
print("searching {} blueprints for results...".format(len(all_blueprints)))
target_blueprints = [bp_name for bp_name in all_blueprints
                     if is_resource_list_in_blueprint(api, bp_name, TARGET_CLOUD_PROVIDER_RESOURCE)]
if not target_blueprints:
    print("No blueprints in system with target resource")
else:
    print("=== Target Blueprints containing '{}' ===".format(TARGET_CLOUD_PROVIDER_RESOURCE))
    pprint(target_blueprints)
    # add to text file
    with open('target_blueprints.txt', 'w') as f:
        for bp in target_blueprints:
            print >> f, bp
print("Done after {} seconds.".format(default_timer() - start))


 
                                    



