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)
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
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
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