コード例 #1
0
def ociArtifacts(artifact):
    logger.info('Artifact : {0:s}'.format(str(artifact)))
    query_string = request.query_string
    parsed_query_string = urllib.parse.unquote(query_string.decode())
    query_json = standardiseIds(json.loads(parsed_query_string),
                                from_char='-',
                                to_char='.')
    logger.debug(
        '===================================== Query Json ====================================='
    )
    logJson(query_json)
    logger.debug(
        '======================================================================================'
    )
    config_profile = query_json.get('config_profile', 'DEFAULT')
    logger.info('Using Profile : {0!s:s}'.format(config_profile))
    response_json = {}
    config = {'region': query_json['region']}
    if artifact == 'Compartment':
        logger.info('---- Processing Compartment')
        oci_compartments = OCICompartments(config=config,
                                           profile=config_profile)
        response_json = oci_compartments.get(
            compartment_id=query_json['compartment_id'])
    elif artifact == 'AutonomousDatabase':
        logger.info('---- Processing Autonomous Databases')
        oci_autonomous_databases = OCIAutonomousDatabases(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_autonomous_databases.list(
            filter=query_json.get('autonomous_database_filter', None))
    elif artifact == 'BlockStorageVolume':
        logger.info('---- Processing Block Storage Volumes')
        oci_block_storage_volumes = OCIBlockStorageVolumes(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_block_storage_volumes.list(
            filter=query_json.get('block_storage_volume_filter', None))
    elif artifact == 'Compartments':
        logger.info('---- Processing Compartments')
        oci_compartments = OCICompartments(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_compartments.list(
            filter=query_json.get('compartment_filter', None))
    elif artifact == 'CustomerPremiseEquipment':
        logger.info('---- Processing Customer Premise Equipment')
        oci_cpes = OCICustomerPremiseEquipments(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_cpes.list(
            filter=query_json.get('cpe_filter', None))
    elif artifact == 'DatabaseSystem':
        logger.info('---- Processing Database Systems')
        oci_database_systems = OCIDatabaseSystems(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_database_systems.list(
            filter=query_json.get('database_system_filter', None))
    elif artifact == 'DynamicRoutingGateway':
        logger.info('---- Processing Dynamic Routing Gateways')
        oci_dynamic_routing_gateways = OCIDynamicRoutingGateways(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_dynamic_routing_gateways.list(
            filter=query_json.get('dynamic_routing_gateway_filter', None))
    elif artifact == 'FastConnect':
        logger.info('---- Processing FastConnects')
        oci_fast_connects = OCIFastConnects(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_fast_connects.list(
            filter=query_json.get('fast_connect_filter', None))
    elif artifact == 'FileStorageSystem':
        logger.info('---- Processing File Storage Systems')
        oci_file_storage_systems = OCIFileStorageSystems(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_file_storage_systems.list(
            filter=query_json.get('file_storage_system_filter', None))
    elif artifact == 'Instance':
        logger.info('---- Processing Instances')
        oci_instances = OCIInstances(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_instances.list(
            filter=query_json.get('instance_filter', None))
    elif artifact == 'InstancePool':
        logger.info('---- Processing Instance Pools')
        oci_instance_pools = OCIInstancePools(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_instance_pools.list(
            filter=query_json.get('instance_filter', None))
    elif artifact == 'InternetGateway':
        logger.info('---- Processing Internet Gateways')
        oci_internet_gateways = OCIInternetGateways(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_internet_gateways.list(
            filter=query_json.get('internet_gateway_filter', None))
    elif artifact == 'IPSecConnection':
        logger.info('---- Processing IPSec Connections')
        oci_ipsec_connections = OCIIPSecConnections(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_ipsec_connections.list(
            filter=query_json.get('ipsec_connection_filter', None))
    elif artifact == 'LoadBalancer':
        logger.info('---- Processing Load Balancers')
        oci_load_balancers = OCILoadBalancers(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_load_balancers.list(
            filter=query_json.get('load_balancer_filter', None))
        response_json = [
            lb for lb in response_json
            if query_json['subnet_id'] in lb['subnet_ids']
        ]
    elif artifact == 'LocalPeeringGateway':
        logger.info('---- Processing LocalPeeringGateways')
        oci_local_peering_gateways = OCILocalPeeringGateways(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_local_peering_gateways.list(
            filter=query_json.get('local_peering_gateway_filter', None))
    elif artifact == 'MySQLDatabaseSystem':
        logger.info('---- Processing MySQL Database Systems')
        oci_mysql_database_systems = OCIMySQLDatabaseSystems(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_mysql_database_systems.list(
            filter=query_json.get('mysql_database_system_filter', None))
    elif artifact == 'NATGateway':
        logger.info('---- Processing NAT Gateways')
        oci_nat_gateways = OCINATGateways(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_nat_gateways.list(
            filter=query_json.get('nat_gateway_filter', None))
    elif artifact == 'NetworkSecurityGroup':
        logger.info('---- Processing Network Security Groups')
        oci_network_security_groups = OCINetworkSecurityGroups(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_network_security_groups.list(
            filter=query_json.get('network_security_group_filter', None))
    elif artifact == 'ObjectStorageBucket':
        logger.info('---- Processing Object Storage Buckets')
        oci_object_storage_buckets = OCIObjectStorageBuckets(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_object_storage_buckets.list(
            filter=query_json.get('object_storage_bucket_filter', None))
    elif artifact == 'OkeCluster':
        logger.info('---- Processing OKE Clusters')
        oke_clusters = OCIContainers(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oke_clusters.list(
            filter=query_json.get('oke_cluster_filter', None))
    elif artifact == 'RemotePeeringConnection':
        logger.info('---- Processing Remote Peering Connections')
        oci_remote_peering_connections = OCIRemotePeeringConnections(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_remote_peering_connections.list(
            filter=query_json.get('remote_peering_connection_filter', None))
    elif artifact == 'RouteTable':
        logger.info('---- Processing Route Tables')
        oci_route_tables = OCIRouteTables(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_route_tables.list(
            filter=query_json.get('route_table_filter', None))
    elif artifact == 'SecurityList':
        logger.info('---- Processing Security Lists')
        oci_security_lists = OCISecurityLists(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_security_lists.list(
            filter=query_json.get('security_list_filter', None))
    elif artifact == 'ServiceGateway':
        logger.info('---- Processing Service Gateways')
        oci_service_gateways = OCIServiceGateways(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'],
            vcn_id=query_json['vcn_id'])
        response_json = oci_service_gateways.list(
            filter=query_json.get('service_gateway_filter', None))
    elif artifact == 'Subnet':
        logger.info('---- Processing Subnets')
        oci_subnets = OCISubnets(config=config,
                                 profile=config_profile,
                                 compartment_id=query_json['compartment_id'],
                                 vcn_id=query_json['vcn_id'])
        response_json = oci_subnets.list(
            filter=query_json.get('subnet_filter', None))
    elif artifact == 'VirtualCloudNetwork':
        logger.info('---- Processing Virtual Cloud Networks')
        oci_virtual_cloud_networks = OCIVirtualCloudNetworks(
            config=config,
            profile=config_profile,
            compartment_id=query_json['compartment_id'])
        response_json = oci_virtual_cloud_networks.list(
            filter=query_json.get('virtual_cloud_network_filter', None))
    else:
        logger.warn('---- Unknown Artifact : {0:s}'.format(str(artifact)))
        return '404'

    logger.debug(
        json.dumps(response_json,
                   sort_keys=True,
                   indent=2,
                   separators=(',', ': ')))
    return json.dumps(standardiseIds(response_json), sort_keys=True)
コード例 #2
0
def executeQuery(request_json={}, **kwargs):
    response_json = {}
    logger.info('Request JSON : {0:s}'.format(str(request_json)))
    compartment_id = request_json['compartment_id']
    filter = request_json.get('virtual_cloud_network_filter', None)
    if filter == '':
        filter = None
    oci_compartments = OCICompartments()
    compartment_json = oci_compartments.get(compartment_id=compartment_id)
    oci_compartment = oci_compartments.compartments_obj[0]
    # Build OKIT Response json add compartment information
    response_json['compartments'] = [compartment_json]
    logger.info('Compartment: {0!s:s}'.format(oci_compartment.data['name']))
    # Query all Virtual Cloud Networks
    oci_virtual_cloud_networks = oci_compartment.getVirtualCloudNetworkClients(
    )
    response_json["virtual_cloud_networks"] = oci_virtual_cloud_networks.list(
        filter=filter)
    # Loop through resulting json
    for oci_virtual_cloud_network in oci_virtual_cloud_networks.virtual_cloud_networks_obj:
        logger.info('\tVirtual Cloud Network : {0!s:s}'.format(
            oci_virtual_cloud_network.data['display_name']))
        # Internet Gateways
        oci_internet_gateways = oci_virtual_cloud_network.getInternetGatewayClients(
        )
        response_json['internet_gateways'] = oci_internet_gateways.list()
        for oci_internet_gateway in oci_internet_gateways.internet_gateways_obj:
            logger.info('\t\tInternet Gateway : {0!s:s}'.format(
                oci_internet_gateway.data['display_name']))
        # Route Tables
        oci_route_tables = oci_virtual_cloud_network.getRouteTableClients()
        response_json['route_tables'] = oci_route_tables.list()
        for oci_route_table in oci_route_tables.route_tables_obj:
            logger.info('\t\tRoute Table : {0!s:s}'.format(
                oci_route_table.data['display_name']))
        # Security Lists
        security_lists = oci_virtual_cloud_network.getSecurityListClients()
        response_json['security_lists'] = security_lists.list()
        for security_list in security_lists.security_lists_obj:
            logger.info('\t\tSecurity List : {0!s:s}'.format(
                security_list.data['display_name']))
        # Subnets
        subnets = oci_virtual_cloud_network.getSubnetClients()
        response_json['subnets'] = subnets.list()
        for subnet in subnets.subnets_obj:
            logger.info('\t\tSubnet : {0!s:s}'.format(
                subnet.data['display_name']))
    # Query all Instances
    oci_instances = oci_compartment.getInstanceClients()
    response_json['instances'] = oci_instances.list(filter=filter)
    oci_instance_vnics = oci_compartment.getInstanceVnicClients()
    for instance in response_json['instances']:
        instance['vnics'] = oci_instance_vnics.list(instance_id=instance['id'])
        instance['subnet_id'] = instance['vnics'][0]['subnet_id']
    # Query all Load Balancers
    oci_load_balancers = oci_compartment.getLoadBalancerClients()
    response_json['load_balancers'] = oci_load_balancers.list(filter=filter)

    logger.debug('Response     : {0:s}'.format(str(response_json)))
    logJson(response_json)
    response_json = standardiseJson(response_json)
    logJson(response_json)
    return response_json
コード例 #3
0
def ociResourceManger():
    if request.method == 'GET':
        query_string = request.query_string
        parsed_query_string = urllib.parse.unquote(query_string.decode())
        query_json = json.loads(parsed_query_string)
        logJson(query_json)
        config_profile = query_json.get('location',
                                        {}).get('config_profile', 'DEFAULT')
        compartment_id = query_json.get('location',
                                        {}).get('compartment_id', None)
        region = query_json.get('location', {}).get('region', None)
        try:
            config = {'region': region}
            oci_resourcemanager = OCIResourceManagers(
                config=config,
                profile=config_profile,
                compartment_id=compartment_id)
            stacks = oci_resourcemanager.list()
            return json.dumps(stacks,
                              sort_keys=False,
                              indent=2,
                              separators=(',', ': '))
        except Exception as e:
            logger.exception(e)
            return str(e), 500
    elif request.method == 'POST':
        logger.debug('JSON     : {0:s}'.format(str(request.json)))
        config_profile = request.json.get('location',
                                          {}).get('config_profile', 'DEFAULT')
        compartment_id = request.json.get('location',
                                          {}).get('compartment_id', None)
        region = request.json.get('location', {}).get('region', None)
        plan_or_apply = request.json.get('location',
                                         {}).get('plan_or_apply', 'PLAN')
        create_or_update = request.json.get('location',
                                            {}).get('create_or_update',
                                                    'CREATE')
        stack_id = request.json.get('location', {}).get('stack_id', '')
        stack_name = request.json.get('location', {}).get(
            'stack_name',
            'okit-stack-{0!s:s}'.format(time.strftime('%Y%m%d%H%M%S')))
        logger.info('Using Profile : {0!s:s}'.format(config_profile))
        try:
            config = {'region': region}
            destination_dir = tempfile.mkdtemp()
            logger.debug(">>>>>>>>>>>>> {0!s:s}".format(destination_dir))
            stack = {}
            stack['display_name'] = stack_name
            oci_compartments = OCICompartments(config=config,
                                               profile=config_profile)
            # Generate Resource Manager Terraform zip
            generator = OCIResourceManagerGenerator(
                template_root,
                destination_dir,
                request.json,
                tenancy_ocid=oci_compartments.getTenancy(),
                region=region,
                compartment_ocid=compartment_id)
            generator.generate()
            generator.writeFiles()
            zipname = generator.createZipArchive(
                os.path.join(destination_dir, 'resource-manager'),
                "/tmp/okit-resource-manager")
            logger.info('Zipfile : {0:s}'.format(str(zipname)))
            # Upload to Resource manager
            stack['compartment_id'] = compartment_id
            stack['zipfile'] = zipname
            stack['variables'] = generator.getVariables()
            resource_manager = OCIResourceManagers(
                config=config,
                profile=config_profile,
                compartment_id=compartment_id)
            if create_or_update == 'UPDATE':
                stack['id'] = stack_id
                stack_json = resource_manager.updateStack(stack)
            else:
                stack_json = resource_manager.createStack(stack)
            resource_manager.createJob(stack_json, plan_or_apply)
            return_code = 200
            resource_manager.list()
            shutil.rmtree(destination_dir)
            return stack['display_name'], return_code
        except Exception as e:
            logger.exception(e)
            return str(e), 500
    return
コード例 #4
0
def export(destination):
    logger.debug('Destination : {0:s} - {1:s}'.format(str(destination),
                                                      str(request.method)))
    logger.debug('JSON     : {0:s}'.format(str(request.json)))
    config_profile = request.json.get('config_profile', 'DEFAULT')
    logger.info('Using Profile : {0!s:s}'.format(config_profile))
    if request.method == 'POST':
        try:
            config = {}
            destination_dir = tempfile.mkdtemp()
            logger.debug(">>>>>>>>>>>>> {0!s:s}".format(destination_dir))
            stack = {}
            stack['display_name'] = 'okit-stack-{0!s:s}'.format(
                time.strftime('%Y%m%d%H%M%S'))
            if destination == 'resourcemanager':
                # Get Compartment Information
                export_compartment_index = request.json.get(
                    'open_compartment_index', 0)
                export_compartment_name = request.json['compartments'][
                    export_compartment_index]['name']
                logger.info(
                    "Compartment Name {0!s:s}".format(export_compartment_name))
                oci_compartments = OCICompartments(config=config,
                                                   profile=config_profile)
                compartments = oci_compartments.listTenancy(
                    filter={'name': export_compartment_name})
                logger.debug("Compartments {0!s:s}".format(compartments))
                # If we find a compartment
                if len(compartments) > 0:
                    # Generate Resource Manager Terraform zip
                    generator = OCIResourceManagerGenerator(
                        template_root,
                        destination_dir,
                        request.json,
                        tenancy_ocid=oci_compartments.config['tenancy'],
                        region=oci_compartments.config['region'],
                        compartment_ocid=compartments[0]['id'])
                    generator.generate()
                    generator.writeFiles()
                    zipname = generator.createZipArchive(
                        os.path.join(destination_dir, 'resource-manager'),
                        "/tmp/okit-resource-manager")
                    logger.info('Zipfile : {0:s}'.format(str(zipname)))
                    # Upload to Resource manager
                    stack['compartment_id'] = compartments[0]['id']
                    stack['zipfile'] = zipname
                    stack['variables'] = generator.getVariables()
                    resource_manager = OCIResourceManagers(
                        config=config,
                        profile=config_profile,
                        compartment_id=compartments[0]['id'])
                    stack_json = resource_manager.createStack(stack)
                    resource_manager.createJob(stack_json)
                    return_code = 200
                else:
                    logger.warn('Unknown Compartment {0!s:s}'.format(
                        export_compartment_name))
                    return_code = 400
            shutil.rmtree(destination_dir)
            return stack['display_name'], return_code
        except Exception as e:
            logger.exception(e)
            return str(e), 500
    return