diff --git a/CHANGELOG.md b/CHANGELOG.md index e8ebcac2c..6ca8d346e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,24 @@ # Release Notes +## Version 0.11.0 +**Release Date**: 16th September 2020 +### Features +1. Modify Multiple Select Options to Checkbox Group +2. Add Option to Query Dialog to allow the user to specify if the query will drill down into Sub-Compartments. +3. Modify start functionality to allow the user to specify a local directory where the user templates will be saved. +4. Add display/edit of the Model Title and Description to the web interface. + +### Bug Fixes +1. Database System CPU Count causing error when generating Terraform (Issue: #98) +2. Network Security Groups, for a VCN, were not deleted when the VCN is deleted. +3. DRG not being displayed if it was not attached to a VCN following a query. + + ## Version 0.10.2 **Release Date**: 27th August 2020 ### Bug Fixes -1. Resolve issue where deleting an artefact would cause an addition OKE cluster to be created if one exists on the canvas. In addition deleteing OKE caused it to be removed from the model but not the view. +1. Resolve issue where deleting an artefact would cause an addition OKE cluster to be created if one exists on the canvas. In addition deleting OKE caused it to be removed from the model but not the view. ## Version 0.10.1 diff --git a/README.md b/README.md index f5fe8b111..1297b1d5b 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,33 @@ -# OCI Designer Toolkit [0.10.2](CHANGELOG.md#version-0.10.2) +# OCI Designer Toolkit [0.11.0](CHANGELOG.md#version-0.11.0) -OCI designer toolKIT (OKIT) is a set of tools for enabling design, deploy and visualise OCI environments -through a graphical web based interface. +OCI designer toolKIT (OKIT) is a browser based tool that allows the user to [design](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit), +[deploy](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit) and visualise ([introspect/query](https://www.ateam-oracle.com/the-oci-designer-toolkit-query-feature)) +OCI environments through a graphical web based interface. -The Web based interface will allow architects and designers to build a visual representation of their infrastructure -and then export this in a number of formats. +- [Design](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit) -- svg -- png -- jpeg + The Web based interface will allow architects and designers to build a visual representation of their infrastructure + and then export this in a number of formats. -Once completed the design can be enhanced to add key property information that will allow the designed infrastructure to -be exported to a number of DevOps frameworks. + - svg + - png + - jpeg -- Ansible -- Terraform -- OCI Resource Manager +- [Generate](https://www.ateam-oracle.com/introduction-to-okit-the-oci-designer-toolkit) -This allows for rapid proto-typing and building. + Once completed the design can be enhanced to add key property information allowing the designed infrastructure to + be exported to a number of DevOps frameworks. + + - Ansible + - Terraform + - OCI Resource Manager + + This allows for rapid proto-typing and building. -OKIT will also all the Operations user to capture existing OCI environments, through simple query functionality embedded in -web interface, to provide a portable generic, json, file that can be used to visualise existing systems or generate terraform/ansible. +- [Introspect](https://www.ateam-oracle.com/the-oci-designer-toolkit-query-feature) + + OKIT will also allow the user to introspect existing OCI environments, through simple query functionality embedded within the + web interface, to provide a portable generic json file, that can be used to visualise existing systems or generate terraform/ansible. @@ -30,24 +37,35 @@ Detailed OKIT Installation steps can be found in the [OCI Designer Toolkit Insta ### Quick Start The docker image is the recommended runtime server OKIT provides a simple Docker Compose script to build and start the container. +#### Clone Repository +```bash +git clone --depth 1 https://github.com/oracle/oci-designer-toolkit.git +``` + #### Create Config File -Create the directory __/containers/oci__ and within it a file called __config__ with contents similar to -that below. +Create the OCI cli __config__ file in the directory __oci-designer-toolkit/containers/oci__ with contents similar to that below. +The __*key_file*__ is a fixed value because the contents of the __oci-designer-toolkit/containers/oci__ will be copied to the +appropriate users home directory, as __~/.oci__, during the build process. ```properties [DEFAULT] user=ocid1.user.oc1..aaaaaaaak6z...... fingerprint=3b:7e:37:ec:a0:86:1.... -key_file=~/.oci/oci_api_key.pem +key_file=~/.oci/oci_api_key.pem tenancy=ocid1.tenancy.oc1..aaaaaaaawpqblfem........ region=us-phoenix-1 ``` + +#### Copy Key File + +Copy your __oci_api_key.pem__ to the __oci-designer-toolkit/containers/oci__ directory. + #### Build and Start ```bash cd oci-designer-toolkit/containers/docker -docker-compose up +docker-compose up --detach ``` __*Note:*__ For full connection to OCI you will need to follow the [Installation Create Config File instruction](documentation/Installation.md#oci-config-file) diff --git a/containers/docker/Dockerfile b/containers/docker/Dockerfile index 86157ab19..2f79985f4 100644 --- a/containers/docker/Dockerfile +++ b/containers/docker/Dockerfile @@ -5,7 +5,7 @@ FROM oraclelinux:7-slim LABEL "provider"="Oracle" \ "issues"="https://github.com/oracle/oci-designer-toolkit/issues" \ - "version"="0.9.2" \ + "version"="0.11.0" \ "description"="OKIT Web Server Container." \ "copyright"="Copyright (c) 2020, Oracle and/or its affiliates." SHELL ["/bin/bash", "-c"] @@ -43,7 +43,9 @@ RUN yum install -y \ oci==2.6.0 \ pyyaml==5.2 \ # Create Workspace - && mkdir -p /okit/{config,log,visualiser,okitweb,workspace} + && mkdir -p /okit/{config,log,visualiser,okitweb,workspace,templates} \ + && mkdir -p /okit/okitweb/static/okit/templates \ + && ln -s /okit/templates /okit/okitweb/static/okit/templates/user # Copy source code COPY okitweb /okit/okitweb COPY visualiser /okit/visualiser diff --git a/containers/docker/docker-compose.yml b/containers/docker/docker-compose.yml index ac4958f88..420c99f51 100644 --- a/containers/docker/docker-compose.yml +++ b/containers/docker/docker-compose.yml @@ -13,4 +13,6 @@ services: ports: - 443:443/tcp - 80:80/tcp + volumes: + - "~/okit/user/templates:/okit/templates" ... \ No newline at end of file diff --git a/containers/vagrant/Vagrantfile b/containers/vagrant/Vagrantfile index c2290b876..e54ce081c 100644 --- a/containers/vagrant/Vagrantfile +++ b/containers/vagrant/Vagrantfile @@ -33,6 +33,8 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Disable Audio to prevent CPU spikes v.customize ["modifyvm", :id, "--audio", "none"] end + # This will expose the local OKIT Template folder within the VM + config.vm.synced_folder "~/okit/user/templates", "/okit/templates" # VM hostname config.vm.hostname = NAME diff --git a/documentation/Installation.md b/documentation/Installation.md index 714ff8b60..bf4e7fb9c 100644 --- a/documentation/Installation.md +++ b/documentation/Installation.md @@ -20,40 +20,73 @@ python modules are installed and in addition provide a simple flask server that ## Clone Repository -Before the building either the Docker or Vagrant Images the project will nee to be cloned from the Git Repository (or downloaded) -and it is recommended that the latest Stable Release be cloned. The latest stable version number if shown in the README -and the associated Release tag is in the format vX.Y.Z hence for the version 0.10.2 the Release tag will be -**v0.10.2**. The command shows how this can be cloned to the local machine. +Before the building either the Docker or Vagrant Images the project will need to be cloned, or downloaded, from the GitHub +Repository (or downloaded). The master branch is always the latest Stable Release but previous releases can be found using +associated Release tag is in the format vX.Y.Z hence for the version 0.11.0 the Release tag will be **v0.11.0**. + +The command shows how this can be cloned to the local machine. ```bash -git clone -b v0.10.2 --depth 1 git@github.com:oracle/oci-designer-toolkit.git +git clone --depth 1 git@github.com:oracle/oci-designer-toolkit.git ``` or ```bash -git clone -b v0.10.2 --depth 1 https://github.com/oracle/oci-designer-toolkit.git +git clone --depth 1 https://github.com/oracle/oci-designer-toolkit.git ``` ### Download If you do not have git installed locally the current release of OKIT can be retrieved by downloading it as a zip file from -https://github.com/oracle/oci-designer-toolkit/archive/v0.10.2.zip +[https://github.com/oracle/oci-designer-toolkit/archive/master.zip](https://github.com/oracle/oci-designer-toolkit/archive/master.zip) + +### Update +If you have previously cloned the GitHub Repository you can update to the latest release by pulling it from the repository +with the following command. + +```bash +cd oci-designer-toolkit +git pull +``` + +Your Docker / Vangrant image will need to be rebuilt using one of the following commands: + +#### Docker Compose +```bash +cd oci-designer-toolkit/containers/docker +docker-compose stop +docker-compose build +``` +#### Docker +```bash +cd oci-designer-toolkit +docker rmi okit +docker build --tag okit --file ./containers/docker/Dockerfile --force-rm . +``` + +#### Vagrant +```bash +cd oci-designer-toolkit/containers/vagrant +vagrant halt +vagrant destroy -f +vagrant up +vangrant reload +``` ## OCI Config File Before executing any of the docker container scripts OKIT requires an OCI connection configuration file. This file contains the connection information used by OKIT when executing queries or exporting to Resource Manager. -__*Note:*__ The key_file entry __must not__ be an Absolute path on the host machine. The config directory will be mounted -to the docker, linux, root user ~/.oci directory. +__*Note:* The key_file entry *must not* be an Absolute path on the host machine. The config directory will be copied +to the docker linux root user ~/.oci directory which will be created during the build.__ If you have already installed the OCI SDK/CLI on you machine then you will have already created this file. If you do not have the sdk or cli installed then we will need to create a config as defined in the next section. ### Creating the Config File -Create the directory __/containers/oci__ and within it a file called __config__ with contents similar to -that below. +Create the OCI cli __config__ file in the directory __/containers/oci__ with contents similar to that below. ```properties [DEFAULT] @@ -74,7 +107,7 @@ The docker image is the recommended runtime server OKIT provides a simple Docker ```bash cd oci-designer-toolkit/containers/docker -docker-compose up +docker-compose up --detach ``` ## Docker @@ -103,6 +136,7 @@ cd oci-designer-toolkit docker run -d --rm -p 443:443 -p 80:80 \ --name okit \ --hostname okit \ + --volume ~/okit/user/templates:/okit/templates \ okit ``` @@ -122,7 +156,7 @@ If you want to run the image in and interactive mode then replace to _-d_ in the 2. Install [Vagrant](https://vagrantup.com/) ### Copy the OCI_CONFIG_DIR folder -Copy the contents of the OCI_CONFIG_DIR directory to the oci-designer-toolkit/containers/vagrant/__oci__ folder. +Copy the contents of the OCI_CONFIG_DIR directory to the oci-designer-toolkit/containers/__oci__ folder. The vagrant should now have these folders & files: - Vagrantfile @@ -131,7 +165,7 @@ The vagrant should now have these folders & files: ### Build Vagrant Image ```bash cd oci-designer-toolkit/containers/vagrant/ -vagrant up; vagrant ssh +vagrant up; vagrant reload; vagrant ssh ``` **NOTE**: This step takes about 30 minutes on my mac when you build the VM, a little longer the first time as the Vbox image is downloaded from github. Once the VM is built the vagrant up should just take a few seconds. diff --git a/documentation/Usage.md b/documentation/Usage.md index d4079608f..a0140fe1b 100644 --- a/documentation/Usage.md +++ b/documentation/Usage.md @@ -56,6 +56,7 @@ cd oci-designer-toolkit docker run -d --rm -p 443:443 -p 80:80 \ --name okit \ --hostname okit \ + --volume ~/okit/user/templates:/okit/templates \ okit ``` The __/containers/scripts__ contains helper scripts for Linux/Mac and Windows PowerShell. diff --git a/okitweb/okitImport.py b/okitweb/okitImport.py index 8a78b8f2e..83ab1d3ce 100644 --- a/okitweb/okitImport.py +++ b/okitweb/okitImport.py @@ -11,9 +11,9 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# import os +import urllib from flask import Blueprint from flask import request - import json from common.okitCommon import logJson from common.okitLogging import getLogger @@ -22,17 +22,22 @@ # Configure logging logger = getLogger() -bp = Blueprint('parsers', __name__, url_prefix='/okit/import', static_folder='static/okit') +bp = Blueprint('parsers', __name__, url_prefix='/okit/parse', static_folder='static/okit') debug_mode = bool(str(os.getenv('DEBUG_MODE', 'False')).title()) -@bp.route('hcljson', methods=(['POST'])) -def importHclJson(): - logger.debug('JSON : {0:s}'.format(str(request.json))) - if request.method == 'POST': - logJson(request.json) +@bp.route('hcljson', methods=(['GET'])) +def parseHclJson(): + #logger.debug('JSON : {0:s}'.format(str(request.json))) + 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) # Import HCL - parser = OkitHclJsonParser(request.json) - return json.dumps(parser.parse(), sort_keys=False, indent=2, separators=(',', ': ')) + parser = OkitHclJsonParser(query_json) + response_json = parser.parse() + logJson(response_json) + return json.dumps(response_json, sort_keys=False, indent=2, separators=(',', ': ')) else: return '404' diff --git a/okitweb/okitOci.py b/okitweb/okitOci.py index e146a06da..398f8c9a7 100644 --- a/okitweb/okitOci.py +++ b/okitweb/okitOci.py @@ -38,6 +38,7 @@ from facades.ociFileStorageSystems import OCIFileStorageSystems from facades.ociImage import OCIImages from facades.ociInstance import OCIInstances +from facades.ociInstancePool import OCIInstancePools from facades.ociInternetGateway import OCIInternetGateways from facades.ociLoadBalancer import OCILoadBalancers from facades.ociLocalPeeringGateway import OCILocalPeeringGateways @@ -229,6 +230,10 @@ def ociArtifacts(artifact): 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']) diff --git a/okitweb/okitWebDesigner.py b/okitweb/okitWebDesigner.py index 6c5c5a691..1a95d2867 100644 --- a/okitweb/okitWebDesigner.py +++ b/okitweb/okitWebDesigner.py @@ -159,7 +159,7 @@ def designer(): template_dirs = {} logger.debug('Walking the template directories') rootdir = os.path.join(bp.static_folder, 'templates') - for (dirpath, dirnames, filenames) in os.walk(rootdir): + for (dirpath, dirnames, filenames) in os.walk(rootdir, followlinks=True): logger.debug('dirpath : {0!s:s}'.format(dirpath)) logger.debug('dirnames : {0!s:s}'.format(dirnames)) logger.debug('filenames : {0!s:s}'.format(filenames)) diff --git a/okitweb/static/okit/css/okit_designer.css b/okitweb/static/okit/css/okit_designer.css index cd8457a3e..4f6523c57 100644 --- a/okitweb/static/okit/css/okit_designer.css +++ b/okitweb/static/okit/css/okit_designer.css @@ -184,6 +184,30 @@ overflow: scroll; } +.okit-canvas-details { + display: block; + padding-bottom: 5px; + width: 100%; + overflow: hidden; +} + +.okit-canvas-details > div > div > label { + font-family: Helvetica Neue,Helvetica,Arial,sans-serif; + font-weight: bold; + font-size: small; + margin-left: 1em; +} + +.okit-canvas-details > div > div > input { + font-family: Helvetica Neue,Helvetica,Arial,sans-serif; + font-weight: normal; + margin-left: 1em; +} + +.okit-canvas-details > div { + overflow: hidden; +} + /* ** Property Sheet (Right Column) Classes */ diff --git a/okitweb/static/okit/fragments/json/bastion_server.json b/okitweb/static/okit/fragments/json/bastion_server.json index 6cb2869b3..e4666e245 100644 --- a/okitweb/static/okit/fragments/json/bastion_server.json +++ b/okitweb/static/okit/fragments/json/bastion_server.json @@ -44,7 +44,7 @@ ], "source_details": { "os": "Oracle Linux", - "version": "7.7", + "version": "", "boot_volume_size_in_gbs": "50", "source_type": "image" }, diff --git a/okitweb/static/okit/fragments/json/load_balanced_nginx.json b/okitweb/static/okit/fragments/json/load_balanced_nginx.json index b0ea42341..6119ea39e 100644 --- a/okitweb/static/okit/fragments/json/load_balanced_nginx.json +++ b/okitweb/static/okit/fragments/json/load_balanced_nginx.json @@ -44,7 +44,7 @@ ], "source_details": { "os": "Oracle Linux", - "version": "7.7", + "version": "", "boot_volume_size_in_gbs": "50", "source_type": "image" }, @@ -93,7 +93,7 @@ ], "source_details": { "os": "Oracle Linux", - "version": "7.7", + "version": "", "boot_volume_size_in_gbs": "50", "source_type": "image" }, @@ -142,7 +142,7 @@ ], "source_details": { "os": "Oracle Linux", - "version": "7.7", + "version": "", "boot_volume_size_in_gbs": "50", "source_type": "image" }, @@ -191,7 +191,7 @@ ], "source_details": { "os": "Oracle Linux", - "version": "7.7", + "version": "", "boot_volume_size_in_gbs": "50", "source_type": "image" }, diff --git a/okitweb/static/okit/js/okit_common.js b/okitweb/static/okit/js/okit_common.js index 0a9efbd76..7c16f0305 100644 --- a/okitweb/static/okit/js/okit_common.js +++ b/okitweb/static/okit/js/okit_common.js @@ -57,7 +57,7 @@ function standardiseId(id) { } function getTimestamp() { - console.groupCollapsed('Get TimeStamp'); + console.log('Get TimeStamp'); let dateTimeNow = new Date(); let year = '' + dateTimeNow.getFullYear(); let month = ('00' + dateTimeNow.getMonth()).slice(-2); @@ -73,7 +73,7 @@ function getTimestamp() { console.info('Second : ' + second); let timestamp = year + month + day + '-' + hour + minute + second; console.info('Timestamp : ' + timestamp); - console.groupEnd(); + console.log(); return timestamp; } diff --git a/okitweb/static/okit/js/okit_console.js b/okitweb/static/okit/js/okit_console.js index 7d963805a..6d306fbf0 100644 --- a/okitweb/static/okit/js/okit_console.js +++ b/okitweb/static/okit/js/okit_console.js @@ -4,8 +4,8 @@ */ console.info('Loaded Console Javascript'); -const okitVersion = '0.10.2'; -const okitReleaseDate = '27th August 2020'; +const okitVersion = '0.11.0'; +const okitReleaseDate = '16th September 2020'; // Validation const validate_error_colour = "#ff4d4d"; const validate_warning_colour = "#ffd633"; diff --git a/okitweb/static/okit/js/okit_designer.js b/okitweb/static/okit/js/okit_designer.js index ae8519692..b61316fc9 100644 --- a/okitweb/static/okit/js/okit_designer.js +++ b/okitweb/static/okit/js/okit_designer.js @@ -39,6 +39,7 @@ function resetDesigner() { hideRegionTabBar(); $(jqId(PROPERTIES_PANEL)).load('propertysheets/empty.html'); displayOkitJson(); + $(jqId('file-save-regional-menu-item-li')).addClass('hidden'); } /* ** Set OCI Link @@ -79,13 +80,13 @@ function handleNew(evt) { redrawSVGCanvas(); } function newDiagram() { - console.groupCollapsed('Creating New Diagram'); + console.log('Creating New Diagram'); newModel(); newDesignerView(); okitJsonView.newCanvas(); okitJsonView.newCompartment(); console.info(okitJsonView); - console.groupEnd(); + console.log(); } function newDesignerView() { okitJsonView = new OkitDesignerJsonView(okitJsonModel, 'canvas-div', okitSettings.is_display_grid, palette_svg); @@ -96,6 +97,16 @@ function newModel() { function newRegionsModel() { regionOkitJson = new OkitRegions(); } +function setTitleDescription() { + $('#title').val(okitJsonModel.title); + $('#description').val(okitJsonModel.description); +} +function updateJsonTitle() { + okitJsonModel.title = $('#title').val(); +} +function updateJsonDescription() { + okitJsonModel.description = $('#description').val(); +} /* ** Load Existing Json @@ -103,6 +114,11 @@ function newRegionsModel() { function handleLoad(evt) { hideNavMenu(); resetDesigner(); + /* + ** Add Load File Handling + */ + $('#files').off('change').on('change', handleFileSelect); + // Click Files Element let fileinput = document.getElementById("files"); fileinput.click(); } @@ -160,13 +176,17 @@ function handleSave(evt) { if (okitSettings.is_timestamp_files) { filename = 'okit-' + getTimestamp() + '.json' } - if (Object.keys(regionOkitJson).length > 0) { - console.info('>> Saving Multi Region File'); - saveJson(JSON.stringify(regionOkitJson, null, 2), filename); - } else { - console.info('>> Saving Single Region File'); - saveJson(JSON.stringify(okitJsonModel, null, 2), filename); + console.info('>> Saving Single Region File'); + saveJson(JSON.stringify(okitJsonModel, null, 2), filename); +} +function handleSaveRegional(evt) { + hideNavMenu(); + let filename = "okit-regional.json"; + if (okitSettings.is_timestamp_files) { + filename = 'okit-regional-' + getTimestamp() + '.json' } + console.info('>> Saving Multi Region File'); + saveJson(JSON.stringify(regionOkitJson, null, 2), filename); } function saveJson(text, filename){ let uri = 'data:text/plain;charset=utf-u,'+encodeURIComponent(text); @@ -184,6 +204,7 @@ function handleSaveAs(evt) { .attr('id', 'save_as_template_table') .attr('class', 'table okit-table okit-modal-dialog-table'); let tbody = table.append('div').attr('class', 'tbody'); + // Title let tr = tbody.append('div').attr('class', 'tr'); tr.append('div').attr('class', 'td').text('Title'); tr.append('div').attr('class', 'td').append('input') @@ -191,6 +212,7 @@ function handleSaveAs(evt) { .attr('id', 'template_title') .attr('name', 'template_title') .attr('type', 'text'); + // Description tr = tbody.append('div').attr('class', 'tr'); tr.append('div').attr('class', 'td').text('Description'); tr.append('div').attr('class', 'td').append('input') @@ -198,6 +220,8 @@ function handleSaveAs(evt) { .attr('id', 'template_description') .attr('name', 'template_description') .attr('type', 'text'); + // Type + /* TODO: Reinstate when sub template types are implemented tr = tbody.append('div').attr('class', 'tr'); tr.append('div').attr('class', 'td').text('Type'); tr.append('div').attr('class', 'td').append('input') @@ -205,6 +229,8 @@ function handleSaveAs(evt) { .attr('id', 'template_type') .attr('name', 'template_type') .attr('type', 'text'); + */ + // Save let save_button = d3.select(d3Id('modal_dialog_footer')).append('div').append('button') .attr('id', 'save_as_button') .attr('type', 'button') @@ -215,7 +241,8 @@ function handleSaveAs(evt) { function handleSaveAsTemplate(e) { okitJsonModel.title = $(jqId('template_title')).val(); okitJsonModel.description = $(jqId('template_description')).val(); - okitJsonModel.template_type = $(jqId('template_type')).val(); + //okitJsonModel.template_type = $(jqId('template_type')).val(); + okitJsonModel.template_type = 'User'; $.ajax({ type: 'post', url: 'saveas/template', @@ -357,6 +384,18 @@ function displayQueryDialog() { .append('option') .attr('value', 'Retrieving') .text('Retrieving..........'); + // Sub-Compartment + tr = tbody.append('div') + .attr('class', 'tr'); + tr.append('div').attr('class', 'td').text(''); + let td = tr.append('div').attr('class', 'td'); + td.append('input') + .attr('id', 'include_sub_compartments') + .attr('name', 'include_sub_compartments') + .attr('type', 'checkbox'); + td.append('label') + .attr('for', 'include_sub_compartments') + .text('Include Sub Compartments'); // Submit Button let submit = d3.select(d3Id('modal_dialog_footer')).append('div').append('button') .attr('id', 'submit_query_btn') @@ -477,11 +516,12 @@ function selectQueryLastUsedCompartment() { } let queryCount = 0; function showQueryResults() { - console.group('Generating Query Results'); + console.log('Generating Query Results'); let regions = $(jqId('query_region_id')).val(); let request = {}; request.compartment_id = $(jqId('query_compartment_id')).val(); request.config_profile = $(jqId('config_profile')).val(); + request.sub_compartments = $(jqId('include_sub_compartments')).is(':checked'); request.region = ''; clearRegionTabBar(); showRegionTabBar(); @@ -497,6 +537,7 @@ function showQueryResults() { for (const [i, region] of regions.entries()) { addRegionTab(region); } + $(jqId('file-save-regional-menu-item-li')).removeClass('hidden'); $(jqId(regionTabName(regions[0]))).trigger("click"); okitOCIQuery.query(request, function(region) { console.info('Complete ' + region); @@ -510,7 +551,7 @@ function showQueryResults() { console.info('Region Not Selected.'); } $(jqId('modal_dialog_wrapper')).addClass('hidden'); - console.groupEnd(); + console.log(); } $(document).ajaxStop(function() { console.info('All Ajax Functions Stopped'); @@ -561,7 +602,7 @@ function handleExportToJPG(evt) { saveAsImage('jpeg'); } function saveAsImage(type='jpeg') { - console.group("Saving As " + type); + console.log("Saving As " + type); let svg = d3.select(d3Id("canvas-svg")).node(); let serializer = new XMLSerializer(); let svgStr = serializer.serializeToString(svg); @@ -591,7 +632,7 @@ function saveAsImage(type='jpeg') { } img.src = 'data:image/svg+xml;base64,' + window.btoa(svgStr); - console.groupEnd(); + console.log(); } /* ** Resource Manager @@ -644,6 +685,7 @@ function displayOkitJson() { */ function displayDesignerView() { okitJsonView.draw(); + setTitleDescription(); } /* ** Slidebar handlers @@ -747,7 +789,7 @@ function displayValidationResults(results) { d3.select(d3Id(error.id)).attr('fill', fill); }); tr.on('click', () => { - error_propeties.push(error.element); + error_properties.push(error.element); d3.select(d3Id(error.id + '-svg')).on("click")(); $('#toggle_properties_button').click(); }); @@ -777,7 +819,7 @@ function displayValidationResults(results) { d3.select(d3Id(warning.id)).attr('fill', fill); }); tr.on('click', () => { - warning_propeties.push(warning.element); + warning_properties.push(warning.element); d3.select(d3Id(warning.id + '-svg')).on("click")(); $('#toggle_properties_button').click(); }); diff --git a/okitweb/static/okit/js/okit_designer_properties.js b/okitweb/static/okit/js/okit_designer_properties.js index 7f3742b66..f6cd76400 100644 --- a/okitweb/static/okit/js/okit_designer_properties.js +++ b/okitweb/static/okit/js/okit_designer_properties.js @@ -41,11 +41,11 @@ function setDescendantProp(obj, desc, value) { return obj[arr[0]] = value; } -let error_propeties = []; -let warning_propeties = []; +let error_properties = []; +let warning_properties = []; function loadPropertiesSheet(json_element) { - console.groupCollapsed('Loading Properties'); + console.log('Loading Properties'); $.each(json_element, function(key, val) { console.info('Key : ' + key + ' = ' + val); if (val == null) { @@ -89,6 +89,7 @@ function loadPropertiesSheet(json_element) { $(jqId(key)).find("input:checkbox").each(function() { if ($(this).prop('checked')) {json_element[key].push($(this).val());} }); + redrawSVGCanvas(); }); if (val.includes($(this).val())) {$(this).prop("checked", true);} }); @@ -183,18 +184,18 @@ function loadPropertiesSheet(json_element) { d3.select(d3Id("optional_properties")).attr("open", "open"); } // Check for Errors & Warnings - for (let property_name of error_propeties) { + for (let property_name of error_properties) { $(jqId(property_name)).addClass('okit-error'); $(jqId(property_name)).focus(); } - error_propeties = []; - for (let property_name of warning_propeties) { + error_properties = []; + for (let property_name of warning_properties) { $(jqId(property_name)).addClass('okit-warning'); } - warning_propeties = []; + warning_properties = []; // Set up Multi Select boxes to toggle select //$("select[multiple] option").mousedown(function() {let $self = $(this); $self.prop('selected', !$self.prop('selected')); return false;}); - console.groupEnd(); + console.log(); } function addFreeformTag(json_element) { diff --git a/okitweb/static/okit/js/okit_designer_ready.js b/okitweb/static/okit/js/okit_designer_ready.js index 8c97cda1f..d36cacfc0 100644 --- a/okitweb/static/okit/js/okit_designer_ready.js +++ b/okitweb/static/okit/js/okit_designer_ready.js @@ -221,7 +221,7 @@ $(document).ready(function() { /* ** Add Load File Handling */ - document.getElementById('files').addEventListener('change', handleFileSelect, false); + //document.getElementById('files').addEventListener('change', handleFileSelect, false); /* ** Load Empty Properties Sheet @@ -275,6 +275,13 @@ $(document).ready(function() { }); /**/ + $(jqId('navigation_menu_button')).click(function(e) { + slideRightPanelsOffScreen(); + $(jqId('designer_right_column')).addClass('okit-slide-hide-right'); + }); + + + setOCILink(); /* diff --git a/okitweb/static/okit/js/okit_designer_svg.js b/okitweb/static/okit/js/okit_designer_svg.js index df27d5466..39f023c16 100644 --- a/okitweb/static/okit/js/okit_designer_svg.js +++ b/okitweb/static/okit/js/okit_designer_svg.js @@ -300,7 +300,7 @@ function generateArc(radius, clockwise, xmod, ymod) { } function drawConnector(parent_svg, id, start={x:0, y:0}, end={x:0, y:0}, horizontal=false) { - console.groupCollapsed('Generating Connector'); + console.log('Generating Connector'); console.info('Start Coordinates : ' + JSON.stringify(start)); console.info('End Coordinates : ' + JSON.stringify(end)); if (horizontal) { @@ -308,11 +308,11 @@ function drawConnector(parent_svg, id, start={x:0, y:0}, end={x:0, y:0}, horizon } else { drawVerticalConnector(parent_svg, id, start, end); } - console.groupEnd(); + console.log(); } function drawVerticalConnector(parent_svg, id, start={x:0, y:0}, end={x:0, y:0},) { - console.groupCollapsed('Generating Vertical Connector'); + console.log('Generating Vertical Connector'); console.info('Start Coordinates : ' + JSON.stringify(start)); console.info('End Coordinates : ' + JSON.stringify(end)); if (path_connector) { @@ -396,11 +396,11 @@ function drawVerticalConnector(parent_svg, id, start={x:0, y:0}, end={x:0, y:0}, .attr("marker-end", "url(#connector-end-circle)"); //return polyline; } - console.groupEnd(); + console.log(); } function drawHorizontalConnector(parent_svg, id, start={x:0, y:0}, end={x:0, y:0}) { - console.groupCollapsed('Generating Horizontal Connector'); + console.log('Generating Horizontal Connector'); console.info('Start Coordinates : ' + JSON.stringify(start)); console.info('End Coordinates : ' + JSON.stringify(end)); if (path_connector) { @@ -482,7 +482,7 @@ function drawHorizontalConnector(parent_svg, id, start={x:0, y:0}, end={x:0, y:0 .attr("marker-start", "url(#connector-end-circle)") .attr("marker-end", "url(#connector-end-circle)"); } - console.groupEnd(); + console.log(); } function coordString(coord) { @@ -518,7 +518,7 @@ const default_canvas_width = Math.round($(window).width() / 10) * 10; const default_canvas_height = Math.round(($(window).height() * 2) / 10) * 10; function newCanvasWrapper(width=default_canvas_width, height=default_canvas_height) { - console.groupCollapsed('New Canvas Wrapper'); + console.log('New Canvas Wrapper'); let parent_id = 'canvas-wrapper'; let canvas_wrapper_div = d3.select(d3Id(parent_id)); let parent_width = $(jqId(parent_id)).width(); @@ -538,14 +538,14 @@ function newCanvasWrapper(width=default_canvas_width, height=default_canvas_heig console.info('Window Height : ' + $(window).height()); console.info('Canvas Width : ' + width); console.info('Canvas Height : ' + height); - console.groupEnd(); + console.log(); return canvas_wrapper_div; } // TODO: Deprecated function newCanvasDeprecated(parent_id="canvas-div", width=400, height=300) { - console.groupCollapsed('New Canvas'); + console.log('New Canvas'); console.info('Parent : ' + parent_id); console.info('Width : ' + width); console.info('Height : ' + height); @@ -584,7 +584,7 @@ function newCanvasDeprecated(parent_id="canvas-div", width=400, height=300) { .attr("preserveAspectRatio", "xMinYMin meet"); clearCanvas(); - console.groupEnd(); + console.log(); return canvas_svg; } diff --git a/okitweb/static/okit/js/okit_import.js b/okitweb/static/okit/js/okit_import.js new file mode 100644 index 000000000..1a68c270f --- /dev/null +++ b/okitweb/static/okit/js/okit_import.js @@ -0,0 +1,59 @@ +/* +** Copyright (c) 2020, Oracle and/or its affiliates. +** Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +*/ +console.info('Loaded Import Javascript'); + +function handleImportFromHCLJson(e) { + hideNavMenu(); + /* + ** Add Load File Handling + */ + $('#files').off('change').on('change', handleFileImportSelect); + // Click Files Element + let fileinput = document.getElementById("files"); + fileinput.click(); +} +function handleFileImportSelect(evt) { + let files = evt.target.files; // FileList object + getHclJson(files[0]); +} +function getHclJson(readFile) { + let reader = new FileReader(); + reader.onload = hclLoaded; + reader.onerror = errorHandler; + reader.readAsText(readFile); +} +function hclLoaded(evt) { + // Clear Existing Region + regionOkitJson = {}; + okitJsonModel = null + hideRegionTabBar(); + clearRegionTabBar(); + // Obtain the read file data + let fileString = evt.target.result; + let fileJson = JSON.parse(fileString); + console.info(fileJson); + $.ajax({ + type: 'get', + url: 'parse/hcljson', + dataType: 'text', + contentType: 'application/json', + data: JSON.stringify(fileJson), + success: function(resp) { + let response_json = JSON.parse(resp); + okitJsonModel = new OkitJson(JSON.stringify(response_json.okit_json)); + newDesignerView(); + displayOkitJson(); + displayDesignerView(); + displayTreeView(); + }, + error: function(xhr, status, error) { + console.info('Status : '+ status) + console.info('Error : '+ error) + }, + complete: function() { + console.info('Parsing Complete'); + } + }); +} diff --git a/okitweb/static/okit/json/dropdown.json b/okitweb/static/okit/json/dropdown.json index e4779405f..7fbc1808f 100644 --- a/okitweb/static/okit/json/dropdown.json +++ b/okitweb/static/okit/json/dropdown.json @@ -239,10 +239,27 @@ "shape_family": "EXACC" }, { - "available_core_count": 368, + "available_core_count": 48, "available_data_storage_in_t_bs": 427, "available_db_node_storage_in_g_bs": 8800, "available_memory_in_gbs": 5760, + "core_count_increment": 2, + "maximum_node_count": 2, + "min_core_count_per_node": 2, + "min_data_storage_in_t_bs": 1, + "min_db_node_storage_per_node_in_g_bs": 60, + "min_memory_per_node_in_g_bs": 30, + "minimum_core_count": 4, + "minimum_node_count": 2, + "name": "ExadataCC.BaseX8M.48", + "shape": "ExadataCC.BaseX8M.48", + "shape_family": "EXACC" + }, + { + "available_core_count": 368, + "available_data_storage_in_t_bs": 598, + "available_db_node_storage_in_g_bs": 7200, + "available_memory_in_gbs": 5760, "core_count_increment": 8, "maximum_node_count": 8, "min_core_count_per_node": 2, @@ -257,9 +274,9 @@ }, { "available_core_count": 400, - "available_data_storage_in_t_bs": 598, - "available_db_node_storage_in_g_bs": 7200, - "available_memory_in_gbs": 5760, + "available_data_storage_in_t_bs": 213, + "available_db_node_storage_in_g_bs": 4400, + "available_memory_in_gbs": 2880, "core_count_increment": 8, "maximum_node_count": 8, "min_core_count_per_node": 2, @@ -273,10 +290,27 @@ "shape_family": "EXACC" }, { - "available_core_count": 184, - "available_data_storage_in_t_bs": 213, - "available_db_node_storage_in_g_bs": 4400, + "available_core_count": 400, + "available_data_storage_in_t_bs": 299, + "available_db_node_storage_in_g_bs": 3600, "available_memory_in_gbs": 2880, + "core_count_increment": 2, + "maximum_node_count": 8, + "min_core_count_per_node": 2, + "min_data_storage_in_t_bs": 1, + "min_db_node_storage_per_node_in_g_bs": 60, + "min_memory_per_node_in_g_bs": 30, + "minimum_core_count": 16, + "minimum_node_count": 8, + "name": "ExadataCC.FullX8M.400", + "shape": "ExadataCC.FullX8M.400", + "shape_family": "EXACC" + }, + { + "available_core_count": 184, + "available_data_storage_in_t_bs": 106, + "available_db_node_storage_in_g_bs": 2200, + "available_memory_in_gbs": 1440, "core_count_increment": 4, "maximum_node_count": 4, "min_core_count_per_node": 2, @@ -291,9 +325,9 @@ }, { "available_core_count": 200, - "available_data_storage_in_t_bs": 299, - "available_db_node_storage_in_g_bs": 3600, - "available_memory_in_gbs": 2880, + "available_data_storage_in_t_bs": 149, + "available_db_node_storage_in_g_bs": 1800, + "available_memory_in_gbs": 1440, "core_count_increment": 4, "maximum_node_count": 4, "min_core_count_per_node": 2, @@ -306,17 +340,34 @@ "shape": "ExadataCC.Half3.200", "shape_family": "EXACC" }, + { + "available_core_count": 200, + "available_data_storage_in_t_bs": null, + "available_db_node_storage_in_g_bs": null, + "available_memory_in_gbs": null, + "core_count_increment": 2, + "maximum_node_count": 4, + "min_core_count_per_node": 0, + "min_data_storage_in_t_bs": null, + "min_db_node_storage_per_node_in_g_bs": null, + "min_memory_per_node_in_g_bs": null, + "minimum_core_count": 8, + "minimum_node_count": 4, + "name": "ExadataCC.HalfX8M.200", + "shape": "ExadataCC.HalfX8M.200", + "shape_family": "EXACC" + }, { "available_core_count": 92, - "available_data_storage_in_t_bs": 106, - "available_db_node_storage_in_g_bs": 2200, - "available_memory_in_gbs": 1440, + "available_data_storage_in_t_bs": null, + "available_db_node_storage_in_g_bs": null, + "available_memory_in_gbs": null, "core_count_increment": 2, "maximum_node_count": 2, - "min_core_count_per_node": 2, - "min_data_storage_in_t_bs": 1, - "min_db_node_storage_per_node_in_g_bs": 60, - "min_memory_per_node_in_g_bs": 30, + "min_core_count_per_node": 8, + "min_data_storage_in_t_bs": null, + "min_db_node_storage_per_node_in_g_bs": null, + "min_memory_per_node_in_g_bs": null, "minimum_core_count": 4, "minimum_node_count": 2, "name": "ExadataCC.Quarter2.92", @@ -325,21 +376,38 @@ }, { "available_core_count": 100, - "available_data_storage_in_t_bs": 149, - "available_db_node_storage_in_g_bs": 1800, - "available_memory_in_gbs": 1440, + "available_data_storage_in_t_bs": null, + "available_db_node_storage_in_g_bs": null, + "available_memory_in_gbs": null, "core_count_increment": 2, "maximum_node_count": 2, - "min_core_count_per_node": 2, - "min_data_storage_in_t_bs": 1, - "min_db_node_storage_per_node_in_g_bs": 60, - "min_memory_per_node_in_g_bs": 30, + "min_core_count_per_node": 1, + "min_data_storage_in_t_bs": null, + "min_db_node_storage_per_node_in_g_bs": null, + "min_memory_per_node_in_g_bs": null, "minimum_core_count": 4, "minimum_node_count": 2, "name": "ExadataCC.Quarter3.100", "shape": "ExadataCC.Quarter3.100", "shape_family": "EXACC" }, + { + "available_core_count": 100, + "available_data_storage_in_t_bs": null, + "available_db_node_storage_in_g_bs": null, + "available_memory_in_gbs": null, + "core_count_increment": 2, + "maximum_node_count": 2, + "min_core_count_per_node": 2, + "min_data_storage_in_t_bs": null, + "min_db_node_storage_per_node_in_g_bs": null, + "min_memory_per_node_in_g_bs": null, + "minimum_core_count": 4, + "minimum_node_count": 2, + "name": "ExadataCC.QuarterX8M.100", + "shape": "ExadataCC.QuarterX8M.100", + "shape_family": "EXACC" + }, { "available_core_count": 1, "available_data_storage_in_t_bs": null, @@ -347,7 +415,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 1, - "min_core_count_per_node": 0, + "min_core_count_per_node": 4, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -364,7 +432,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 8, + "min_core_count_per_node": 0, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -381,7 +449,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 1, + "min_core_count_per_node": 8, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -398,7 +466,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 2, + "min_core_count_per_node": 1, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -415,7 +483,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 4, + "min_core_count_per_node": 12, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -432,7 +500,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 1, - "min_core_count_per_node": 0, + "min_core_count_per_node": 2, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -449,7 +517,7 @@ "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 8, + "min_core_count_per_node": 4, "min_data_storage_in_t_bs": null, "min_db_node_storage_per_node_in_g_bs": null, "min_memory_per_node_in_g_bs": null, @@ -461,15 +529,8 @@ }, { "available_core_count": 2, - "available_data_storage_in_t_bs": null, - "available_db_node_storage_in_g_bs": null, - "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 1, - "min_data_storage_in_t_bs": null, - "min_db_node_storage_per_node_in_g_bs": null, - "min_memory_per_node_in_g_bs": null, "minimum_core_count": 2, "minimum_node_count": 1, "name": "VM.Standard2.2", @@ -478,15 +539,8 @@ }, { "available_core_count": 24, - "available_data_storage_in_t_bs": null, - "available_db_node_storage_in_g_bs": null, - "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 12, - "min_data_storage_in_t_bs": null, - "min_db_node_storage_per_node_in_g_bs": null, - "min_memory_per_node_in_g_bs": null, "minimum_core_count": 24, "minimum_node_count": 1, "name": "VM.Standard2.24", @@ -495,15 +549,8 @@ }, { "available_core_count": 4, - "available_data_storage_in_t_bs": null, - "available_db_node_storage_in_g_bs": null, - "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 2, - "min_data_storage_in_t_bs": null, - "min_db_node_storage_per_node_in_g_bs": null, - "min_memory_per_node_in_g_bs": null, "minimum_core_count": 4, "minimum_node_count": 1, "name": "VM.Standard2.4", @@ -512,15 +559,8 @@ }, { "available_core_count": 8, - "available_data_storage_in_t_bs": null, - "available_db_node_storage_in_g_bs": null, - "available_memory_in_gbs": null, "core_count_increment": 0, "maximum_node_count": 2, - "min_core_count_per_node": 4, - "min_data_storage_in_t_bs": null, - "min_db_node_storage_per_node_in_g_bs": null, - "min_memory_per_node_in_g_bs": null, "minimum_core_count": 8, "minimum_node_count": 1, "name": "VM.Standard2.8", @@ -593,9 +633,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-16.04-Gen2-GPU-2020.05.20-0", + "display_name": "Canonical-Ubuntu-16.04-GPU-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaalvh6kr662y336bpie6ejv3drvfgzgoah4pbddl4vtzjmjs5mu3fq", + "id": "ocid1.image.oc1.phx.aaaaaaaaxpucjbl7qexlbxnzdk6bwjcj2hgbw2sk5jmhssnm5xzb5wzolfia", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -611,7 +651,7 @@ "shapes": [], "size_in_mbs": 47694, "sort_key": "Canonical Ubuntu 16.04", - "time_created": "2020-05-28T23:06:37.873000+00:00" + "time_created": "2020-09-01T19:26:06.498000+00:00" }, { "agent_features": null, @@ -639,6 +679,32 @@ "sort_key": "Canonical Ubuntu 16.04", "time_created": "2020-07-22T20:24:11.371000+00:00" }, + { + "agent_features": null, + "base_image_id": null, + "compartment_id": null, + "create_image_allowed": true, + "defined_tags": {}, + "display_name": "Canonical-Ubuntu-16.04-2020.08.22-0", + "freeform_tags": {}, + "id": "ocid1.image.oc1.phx.aaaaaaaaiwnf6fs4kepafusmchvrvm7g2fiv4rehk5hodkl24bcupk46s2ra", + "launch_mode": "NATIVE", + "launch_options": { + "boot_volume_type": "PARAVIRTUALIZED", + "firmware": "UEFI_64", + "is_consistent_volume_naming_enabled": true, + "is_pv_encryption_in_transit_enabled": true, + "network_type": "PARAVIRTUALIZED", + "remote_data_volume_type": "PARAVIRTUALIZED" + }, + "lifecycle_state": "AVAILABLE", + "operating_system": "Canonical Ubuntu", + "operating_system_version": "16.04", + "shapes": [], + "size_in_mbs": 47694, + "sort_key": "Canonical Ubuntu 16.04", + "time_created": "2020-09-01T18:53:54.900000+00:00" + }, { "agent_features": null, "base_image_id": null, @@ -697,9 +763,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-16.04-2020.05.14-0", + "display_name": "Canonical-Ubuntu-16.04-Minimal-2020.08.21-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaa2peprayqh5fdqlkq2dnggk6nfjs6zh5oovupqvdkkcagh6rtimjq", + "id": "ocid1.image.oc1.phx.aaaaaaaarou4zixzafitlt3deatqlerle2fxgdwmit4pcniinaqf3444scta", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -711,11 +777,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Canonical Ubuntu", - "operating_system_version": "16.04", + "operating_system_version": "16.04 Minimal", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Canonical Ubuntu 16.04", - "time_created": "2020-05-28T23:18:24.692000+00:00" + "sort_key": "Canonical Ubuntu 16.04 Minimal", + "time_created": "2020-09-01T19:26:11.531000+00:00" }, { "agent_features": null, @@ -775,9 +841,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-16.04-Minimal-2020.05.18-0", + "display_name": "Canonical-Ubuntu-18.04-2020.08.21-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaz5xh626t6uchmdnx7gc3jqwghzpsa2acdd6txoqvg44ch7bfj3cq", + "id": "ocid1.image.oc1.phx.aaaaaaaamhfsprw4mmclsybts333m6qmnvj3t35czxe6iboxukx4butltr5q", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -789,11 +855,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Canonical Ubuntu", - "operating_system_version": "16.04 Minimal", + "operating_system_version": "18.04", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Canonical Ubuntu 16.04 Minimal", - "time_created": "2020-05-28T23:20:56.427000+00:00" + "sort_key": "Canonical Ubuntu 18.04", + "time_created": "2020-09-01T19:26:07.014000+00:00" }, { "agent_features": null, @@ -853,9 +919,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-18.04-2020.05.06-0", + "display_name": "Canonical-Ubuntu-18.04-Minimal-2020.08.25-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaakgt35lyfplkaitq2v23fj4ixoeu2vsfsazaemdwhailydl6wyiia", + "id": "ocid1.image.oc1.phx.aaaaaaaasit6dalhenmeijklokta5qg2ga62ycuxkugjpwwep6lsvjrycunq", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -867,11 +933,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Canonical Ubuntu", - "operating_system_version": "18.04", + "operating_system_version": "18.04 Minimal", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Canonical Ubuntu 18.04", - "time_created": "2020-05-28T23:05:40.949000+00:00" + "sort_key": "Canonical Ubuntu 18.04 Minimal", + "time_created": "2020-09-01T19:26:33.362000+00:00" }, { "agent_features": null, @@ -931,9 +997,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-18.04-Minimal-2020.05.20-0", + "display_name": "Canonical-Ubuntu-20.04-2020.08.21-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaafqdiu6rijxo6phdk3pnc5furdx7uhzi5ix5chfzcoi5fpvgpsctq", + "id": "ocid1.image.oc1.phx.aaaaaaaarkstoxktdg67crt7nwvtfw3mtxugfjp3pvqkcqbf5g3gwlvuoteq", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -945,11 +1011,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Canonical Ubuntu", - "operating_system_version": "18.04 Minimal", + "operating_system_version": "20.04", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Canonical Ubuntu 18.04 Minimal", - "time_created": "2020-05-28T23:07:33.901000+00:00" + "sort_key": "Canonical Ubuntu 20.04", + "time_created": "2020-09-01T19:20:25.291000+00:00" }, { "agent_features": null, @@ -1009,9 +1075,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-20.04-2020.05.18-0", + "display_name": "Canonical-Ubuntu-20.04-Minimal-2020.08.24-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaarfsrzy573557mj4gcrl2ddhzba3s2sn2anwta5c4xeuwtp4oka5q", + "id": "ocid1.image.oc1.phx.aaaaaaaa5onv7ve7uxvdfianceufk3fzoi4emgbn74kritgdtwuezdscvmza", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1023,11 +1089,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Canonical Ubuntu", - "operating_system_version": "20.04", + "operating_system_version": "20.04 Minimal", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Canonical Ubuntu 20.04", - "time_created": "2020-05-28T23:05:53.340000+00:00" + "sort_key": "Canonical Ubuntu 20.04 Minimal", + "time_created": "2020-09-01T19:26:11.046000+00:00" }, { "agent_features": null, @@ -1087,9 +1153,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Canonical-Ubuntu-20.04-Minimal-2020.05.19-0", + "display_name": "CentOS-6.10-2020.08.25-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaabrsxasb7lpykfx5hzfss6n644ffx25m5ymy3najhoyebemfofsba", + "id": "ocid1.image.oc1.phx.aaaaaaaajsmivftoqhtadcipo43fwg4e5hqyoe5obacjbffn2f5ybkxpioga", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1100,12 +1166,12 @@ "remote_data_volume_type": "PARAVIRTUALIZED" }, "lifecycle_state": "AVAILABLE", - "operating_system": "Canonical Ubuntu", - "operating_system_version": "20.04 Minimal", + "operating_system": "CentOS", + "operating_system_version": "6.10", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Canonical Ubuntu 20.04 Minimal", - "time_created": "2020-05-28T23:07:25.802000+00:00" + "sort_key": "CentOS 6.10", + "time_created": "2020-08-31T20:28:41.680000+00:00" }, { "agent_features": null, @@ -1165,9 +1231,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "CentOS-6.10-2020.05.21-0", + "display_name": "CentOS-7-2020.08.27-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaqjlmsltxacd77mywgurt2iz3yv2rgacbhemhqmyjeian65k2fb3a", + "id": "ocid1.image.oc1.phx.aaaaaaaadjoixa3e3ma5mq7ycs5n7zd7xg2nlrs35n6eyce7w53mgmq5qiwa", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1179,11 +1245,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "CentOS", - "operating_system_version": "6.10", + "operating_system_version": "7", "shapes": [], "size_in_mbs": 47694, - "sort_key": "CentOS 6.10", - "time_created": "2020-05-26T17:34:48.714000+00:00" + "sort_key": "CentOS 7", + "time_created": "2020-08-31T19:31:59.978000+00:00" }, { "agent_features": null, @@ -1243,9 +1309,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "CentOS-7-2020.05.20-0", + "display_name": "Oracle-Autonomous-Linux-7.8-2020.07-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaauqugguwaackbg7rpg5fafqyttsbqhciglus5o47occm4ojvidb6q", + "id": "ocid1.image.oc1.phx.aaaaaaaa2jxeuysrd32npocwtxzwpgcfwzx7xeom3pmyfphsnyz2otzaprsa", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1256,12 +1322,12 @@ "remote_data_volume_type": "PARAVIRTUALIZED" }, "lifecycle_state": "AVAILABLE", - "operating_system": "CentOS", - "operating_system_version": "7", + "operating_system": "Oracle Autonomous Linux", + "operating_system_version": "7.8", "shapes": [], "size_in_mbs": 47694, - "sort_key": "CentOS 7", - "time_created": "2020-05-26T17:35:53.117000+00:00" + "sort_key": "Oracle Autonomous Linux 7.8", + "time_created": "2020-07-31T19:33:36.022000+00:00" }, { "agent_features": null, @@ -1269,9 +1335,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Oracle-Autonomous-Linux-7.8-2020.07-0", + "display_name": "Oracle-Autonomous-Linux-7.8-2020.06-1", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaa2jxeuysrd32npocwtxzwpgcfwzx7xeom3pmyfphsnyz2otzaprsa", + "id": "ocid1.image.oc1.phx.aaaaaaaaqefh4ndpmt2wo6eob3o27i3wulxoaydu64knhydqnxazs7w7r73a", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1287,7 +1353,7 @@ "shapes": [], "size_in_mbs": 47694, "sort_key": "Oracle Autonomous Linux 7.8", - "time_created": "2020-07-31T19:33:36.022000+00:00" + "time_created": "2020-07-02T01:14:37.272000+00:00" }, { "agent_features": null, @@ -1295,9 +1361,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Oracle-Autonomous-Linux-7.8-2020.06-1", + "display_name": "Oracle-Autonomous-Linux-7.8-2020.06-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaqefh4ndpmt2wo6eob3o27i3wulxoaydu64knhydqnxazs7w7r73a", + "id": "ocid1.image.oc1.phx.aaaaaaaa5ys76p4fbcejyktuburxcm3nuboupzwcukyq6d5gzbib6rj4ztqa", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1313,7 +1379,7 @@ "shapes": [], "size_in_mbs": 47694, "sort_key": "Oracle Autonomous Linux 7.8", - "time_created": "2020-07-02T01:14:37.272000+00:00" + "time_created": "2020-06-08T18:01:12.435000+00:00" }, { "agent_features": null, @@ -1321,9 +1387,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Oracle-Autonomous-Linux-7.8-2020.06-0", + "display_name": "Oracle-Linux-6.10-2020.09.03-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaa5ys76p4fbcejyktuburxcm3nuboupzwcukyq6d5gzbib6rj4ztqa", + "id": "ocid1.image.oc1.phx.aaaaaaaayubpaghyiylwq43vtigfufamjg6ixzqkhrnvbmss577kdwrbvlpa", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1334,12 +1400,12 @@ "remote_data_volume_type": "PARAVIRTUALIZED" }, "lifecycle_state": "AVAILABLE", - "operating_system": "Oracle Autonomous Linux", - "operating_system_version": "7.8", + "operating_system": "Oracle Linux", + "operating_system_version": "6.10", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Oracle Autonomous Linux 7.8", - "time_created": "2020-06-08T18:01:12.435000+00:00" + "sort_key": "Oracle Linux 6.10", + "time_created": "2020-09-03T23:53:09.011000+00:00" }, { "agent_features": null, @@ -1399,9 +1465,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Oracle-Linux-6.10-2020.05.26-0", + "display_name": "Oracle-Linux-7.8-Gen2-GPU-2020.08.27-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaadjkjzrynqvqpuramvqru7uae7sksqssh3ta7b43c7qbjzpuue2cq", + "id": "ocid1.image.oc1.phx.aaaaaaaaniwbhubt6dccgp6tkh3ybvxs3ygzdhflkdohohzafkb2xcw77hsa", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1413,11 +1479,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Oracle Linux", - "operating_system_version": "6.10", + "operating_system_version": "7.8", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Oracle Linux 6.10", - "time_created": "2020-05-28T21:32:50.936000+00:00" + "sort_key": "Oracle Linux 7.8", + "time_created": "2020-09-02T22:51:28.464000+00:00" }, { "agent_features": null, @@ -1503,9 +1569,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Oracle-Linux-7.8-Gen2-GPU-2020.05.26-0", + "display_name": "Oracle-Linux-7.8-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaxtjclfbjwrzyhednihub4ghns2l7zzoerc5ffhklahvs7k5lrbgq", + "id": "ocid1.image.oc1.phx.aaaaaaaalj7pqrxkq7qad4m7i6umvfz3lffkugaapwfllfuhaw33nqp2ed4a", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1521,7 +1587,7 @@ "shapes": [], "size_in_mbs": 47694, "sort_key": "Oracle Linux 7.8", - "time_created": "2020-05-28T22:53:17.377000+00:00" + "time_created": "2020-09-02T22:51:26.413000+00:00" }, { "agent_features": null, @@ -1633,9 +1699,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Oracle-Linux-7.8-2020.04.17-0", + "display_name": "Oracle-Linux-8.2-2020.08.27-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaav3isrmykdh6r3dwicrdgpmfdv3fb3jydgh4zqpgm6yr5x3somuza", + "id": "ocid1.image.oc1.phx.aaaaaaaack6wlu7smv5rrk3lofsmzgnc2a42isfchpui555lewm2irlaj6gq", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -1647,11 +1713,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Oracle Linux", - "operating_system_version": "7.8", + "operating_system_version": "8", "shapes": [], "size_in_mbs": 47694, - "sort_key": "Oracle Linux 7.8", - "time_created": "2020-04-20T23:27:33.912000+00:00" + "sort_key": "Oracle Linux 8", + "time_created": "2020-09-02T22:51:32.471000+00:00" }, { "agent_features": null, @@ -2225,6 +2291,32 @@ "sort_key": "Windows Server 2012 R2 Standard", "time_created": "2020-05-26T20:24:52.291000+00:00" }, + { + "agent_features": null, + "base_image_id": null, + "compartment_id": null, + "create_image_allowed": true, + "defined_tags": {}, + "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-E2-2020.08.26-0", + "freeform_tags": {}, + "id": "ocid1.image.oc1.phx.aaaaaaaacrk3ntryi55kp7vvsumoiobyjumeiai7johjtswsbf37iwtxxvra", + "launch_mode": "NATIVE", + "launch_options": { + "boot_volume_type": "PARAVIRTUALIZED", + "firmware": "UEFI_64", + "is_consistent_volume_naming_enabled": false, + "is_pv_encryption_in_transit_enabled": true, + "network_type": "VFIO", + "remote_data_volume_type": "PARAVIRTUALIZED" + }, + "lifecycle_state": "AVAILABLE", + "operating_system": "Windows", + "operating_system_version": "Server 2016 Datacenter", + "shapes": [], + "size_in_mbs": 262144, + "sort_key": "Windows Server 2016 Datacenter", + "time_created": "2020-08-27T05:46:20.134000+00:00" + }, { "agent_features": null, "base_image_id": null, @@ -2283,9 +2375,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-E2-2020.05.19-0", + "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-DenseIO-2020.08.31-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaoaralohcdbceydjin7a556h2smeuo5bc52kiez6f5qf6mdy7yh5a", + "id": "ocid1.image.oc1.phx.aaaaaaaa76naeae7fd4vdgr2ie2lu652gc4q2lminf4xzcfa52qrx57dykgq", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2301,7 +2393,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Datacenter", - "time_created": "2020-05-27T21:51:45.614000+00:00" + "time_created": "2020-08-31T17:21:27.540000+00:00" }, { "agent_features": null, @@ -2361,9 +2453,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-DenseIO-2020.05.19-0", + "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-2020.07.17-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaattsigibplqwqh72odiiwvoohbjhssomzumit2iwkwzshxizjqnja", + "id": "ocid1.image.oc1.phx.aaaaaaaa5bwijh76czm6o7aavgeztig35r66qtnpw3rnpmsx7l3udmrr6isa", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2379,7 +2471,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Datacenter", - "time_created": "2020-05-19T23:43:58.539000+00:00" + "time_created": "2020-07-21T00:39:26.357000+00:00" }, { "agent_features": null, @@ -2387,9 +2479,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-2020.07.17-0", + "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-2020.06.11-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaa5bwijh76czm6o7aavgeztig35r66qtnpw3rnpmsx7l3udmrr6isa", + "id": "ocid1.image.oc1.phx.aaaaaaaaff6ub7rm52jazpacn4zgu5tnnmwc76rat5ya44geocxhgjmquqdq", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2405,7 +2497,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Datacenter", - "time_created": "2020-07-21T00:39:26.357000+00:00" + "time_created": "2020-06-12T20:25:25.447000+00:00" }, { "agent_features": null, @@ -2413,9 +2505,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-2020.06.11-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-Gen2-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaff6ub7rm52jazpacn4zgu5tnnmwc76rat5ya44geocxhgjmquqdq", + "id": "ocid1.image.oc1.phx.aaaaaaaalmpp3iu7emu3a6vdzul4vgn3ibzxnjwgknshhygdfp6nzhlll6za", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2427,11 +2519,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Windows", - "operating_system_version": "Server 2016 Datacenter", + "operating_system_version": "Server 2016 Standard", "shapes": [], "size_in_mbs": 262144, - "sort_key": "Windows Server 2016 Datacenter", - "time_created": "2020-06-12T20:25:25.447000+00:00" + "sort_key": "Windows Server 2016 Standard", + "time_created": "2020-08-27T06:56:40.761000+00:00" }, { "agent_features": null, @@ -2439,9 +2531,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Datacenter-Edition-BM-Gen2-2020.05.19-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-Gen2-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaeedbgch4mmgq6qgz65hh65bayja7eilqje655ppt327vpnxg2k2a", + "id": "ocid1.image.oc1.phx.aaaaaaaalmpp3iu7emu3a6vdzul4vgn3ibzxnjwgknshhygdfp6nzhlll6za", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2453,11 +2545,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Windows", - "operating_system_version": "Server 2016 Datacenter", + "operating_system_version": "Server 2016 Standard", "shapes": [], "size_in_mbs": 262144, - "sort_key": "Windows Server 2016 Datacenter", - "time_created": "2020-05-19T23:43:56.475000+00:00" + "sort_key": "Windows Server 2016 Standard", + "time_created": "2020-08-27T06:56:40.761000+00:00" }, { "agent_features": null, @@ -2517,10 +2609,10 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Standard-Edition-VM-Gen2-2020.05.19-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaan4am2w3o4qnuym5rcs2o5xllzddn7la6zn2xeiqt3ngghi5jljpq", - "launch_mode": "NATIVE", + "id": "ocid1.image.oc1.phx.aaaaaaaafwkpnyue24ldea75hwp5efu6lqgbdc6wqhzfogsek4hxn3dhmn6a", + "launch_mode": "PARAVIRTUALIZED", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", "firmware": "UEFI_64", @@ -2535,7 +2627,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Standard", - "time_created": "2020-05-19T23:43:53.580000+00:00" + "time_created": "2020-08-31T05:02:40.232000+00:00" }, { "agent_features": null, @@ -2543,9 +2635,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.07.17-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaajtis7hovueoffzduuwt5m22cl3cn64v4zergrxkkfw6tgp7q5aua", + "id": "ocid1.image.oc1.phx.aaaaaaaafwkpnyue24ldea75hwp5efu6lqgbdc6wqhzfogsek4hxn3dhmn6a", "launch_mode": "PARAVIRTUALIZED", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2561,7 +2653,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Standard", - "time_created": "2020-07-23T06:21:10.862000+00:00" + "time_created": "2020-08-31T05:02:40.232000+00:00" }, { "agent_features": null, @@ -2569,9 +2661,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.06.11-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.07.17-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaq3zhhsufbvqm5f55it7e7ne4g33w6rjvmkp76wbnvoysxoug5cca", + "id": "ocid1.image.oc1.phx.aaaaaaaajtis7hovueoffzduuwt5m22cl3cn64v4zergrxkkfw6tgp7q5aua", "launch_mode": "PARAVIRTUALIZED", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2587,7 +2679,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Standard", - "time_created": "2020-06-12T20:26:07.032000+00:00" + "time_created": "2020-07-23T06:21:10.862000+00:00" }, { "agent_features": null, @@ -2595,9 +2687,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.05.19-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-E3-2020.06.11-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaasjr56mcb3zwyzzn7aq3zsrwjeorvtnpu376c34jxhwpik6wvix6a", + "id": "ocid1.image.oc1.phx.aaaaaaaaq3zhhsufbvqm5f55it7e7ne4g33w6rjvmkp76wbnvoysxoug5cca", "launch_mode": "PARAVIRTUALIZED", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2613,7 +2705,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Standard", - "time_created": "2020-05-28T03:23:20.475000+00:00" + "time_created": "2020-06-12T20:26:07.032000+00:00" }, { "agent_features": null, @@ -2647,10 +2739,10 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Standard-Edition-VM-B1-2020.05.19-0", + "display_name": "Windows-Server-2016-Standard-Edition-VM-2020.08.26-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaaeiy5qajhmppbkwksbznw6py7vxabgo6uttmsedbt2ubkiiztihmq", - "launch_mode": "PARAVIRTUALIZED", + "id": "ocid1.image.oc1.phx.aaaaaaaaqcpoop4jtnfeg6xh4zenwrnznyokp3bl5kimyuvjjn3p6xx4iwoa", + "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", "firmware": "UEFI_64", @@ -2665,7 +2757,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2016 Standard", - "time_created": "2020-05-28T01:19:28.980000+00:00" + "time_created": "2020-08-27T05:46:33.456000+00:00" }, { "agent_features": null, @@ -2725,9 +2817,9 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2016-Standard-Edition-VM-2020.05.19-0", + "display_name": "Windows-Server-2019-Datacenter-Edition-BM-E3-2020.08.27-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaabiy5lg7reuwaqt76ldjjcmzsosa5wcsefmtvior6gz43ufylqvla", + "id": "ocid1.image.oc1.phx.aaaaaaaajonqlwvrwurvstg46dpipgsqbr4kdcwpgdl5fzp7xsl3ilzmswfq", "launch_mode": "NATIVE", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2739,11 +2831,11 @@ }, "lifecycle_state": "AVAILABLE", "operating_system": "Windows", - "operating_system_version": "Server 2016 Standard", + "operating_system_version": "Server 2019 Datacenter", "shapes": [], "size_in_mbs": 262144, - "sort_key": "Windows Server 2016 Standard", - "time_created": "2020-05-26T22:29:22.439000+00:00" + "sort_key": "Windows Server 2019 Datacenter", + "time_created": "2020-08-27T13:13:39.901000+00:00" }, { "agent_features": null, @@ -2771,6 +2863,58 @@ "sort_key": "Windows Server 2019 Datacenter", "time_created": "2020-06-16T00:14:56.113000+00:00" }, + { + "agent_features": null, + "base_image_id": null, + "compartment_id": null, + "create_image_allowed": true, + "defined_tags": {}, + "display_name": "Windows-Server-2019-Standard-Edition-VM-Gen2-2020.08.28-0", + "freeform_tags": {}, + "id": "ocid1.image.oc1.phx.aaaaaaaaxj2cachojmpi3vzok4u5gfeff5a3ozhkareyxomh6z2po7egnsla", + "launch_mode": "PARAVIRTUALIZED", + "launch_options": { + "boot_volume_type": "PARAVIRTUALIZED", + "firmware": "UEFI_64", + "is_consistent_volume_naming_enabled": false, + "is_pv_encryption_in_transit_enabled": true, + "network_type": "PARAVIRTUALIZED", + "remote_data_volume_type": "PARAVIRTUALIZED" + }, + "lifecycle_state": "AVAILABLE", + "operating_system": "Windows", + "operating_system_version": "Server 2019 Standard", + "shapes": [], + "size_in_mbs": 262144, + "sort_key": "Windows Server 2019 Standard", + "time_created": "2020-08-31T05:36:47.896000+00:00" + }, + { + "agent_features": null, + "base_image_id": null, + "compartment_id": null, + "create_image_allowed": true, + "defined_tags": {}, + "display_name": "Windows-Server-2019-Standard-Edition-VM-Gen2-2020.08.28-0", + "freeform_tags": {}, + "id": "ocid1.image.oc1.phx.aaaaaaaaxj2cachojmpi3vzok4u5gfeff5a3ozhkareyxomh6z2po7egnsla", + "launch_mode": "PARAVIRTUALIZED", + "launch_options": { + "boot_volume_type": "PARAVIRTUALIZED", + "firmware": "UEFI_64", + "is_consistent_volume_naming_enabled": false, + "is_pv_encryption_in_transit_enabled": true, + "network_type": "PARAVIRTUALIZED", + "remote_data_volume_type": "PARAVIRTUALIZED" + }, + "lifecycle_state": "AVAILABLE", + "operating_system": "Windows", + "operating_system_version": "Server 2019 Standard", + "shapes": [], + "size_in_mbs": 262144, + "sort_key": "Windows Server 2019 Standard", + "time_created": "2020-08-31T05:36:47.896000+00:00" + }, { "agent_features": null, "base_image_id": null, @@ -2829,9 +2973,35 @@ "compartment_id": null, "create_image_allowed": true, "defined_tags": {}, - "display_name": "Windows-Server-2019-Standard-Edition-VM-Gen2-2020.05.19-0", + "display_name": "Windows-Server-2019-Standard-Edition-VM-E3-2020.08.28-0", + "freeform_tags": {}, + "id": "ocid1.image.oc1.phx.aaaaaaaa4sbfynqzp65hr2ldkyv7espg3yw6yy2blwg4kmdnk3x6yxt4h2ea", + "launch_mode": "PARAVIRTUALIZED", + "launch_options": { + "boot_volume_type": "PARAVIRTUALIZED", + "firmware": "UEFI_64", + "is_consistent_volume_naming_enabled": false, + "is_pv_encryption_in_transit_enabled": true, + "network_type": "VFIO", + "remote_data_volume_type": "PARAVIRTUALIZED" + }, + "lifecycle_state": "AVAILABLE", + "operating_system": "Windows", + "operating_system_version": "Server 2019 Standard", + "shapes": [], + "size_in_mbs": 262144, + "sort_key": "Windows Server 2019 Standard", + "time_created": "2020-08-31T05:36:40.341000+00:00" + }, + { + "agent_features": null, + "base_image_id": null, + "compartment_id": null, + "create_image_allowed": true, + "defined_tags": {}, + "display_name": "Windows-Server-2019-Standard-Edition-VM-E3-2020.08.28-0", "freeform_tags": {}, - "id": "ocid1.image.oc1.phx.aaaaaaaadjikgykbgctlp25dzsgxe7gxm4jemqu74q5f2uegoqkrhqiosknq", + "id": "ocid1.image.oc1.phx.aaaaaaaa4sbfynqzp65hr2ldkyv7espg3yw6yy2blwg4kmdnk3x6yxt4h2ea", "launch_mode": "PARAVIRTUALIZED", "launch_options": { "boot_volume_type": "PARAVIRTUALIZED", @@ -2847,7 +3017,7 @@ "shapes": [], "size_in_mbs": 262144, "sort_key": "Windows Server 2019 Standard", - "time_created": "2020-05-29T20:44:51.144000+00:00" + "time_created": "2020-08-31T05:36:40.341000+00:00" }, { "agent_features": null, diff --git a/okitweb/static/okit/json/release.json b/okitweb/static/okit/json/release.json index ce76532a4..08b835c7c 100644 --- a/okitweb/static/okit/json/release.json +++ b/okitweb/static/okit/json/release.json @@ -1,4 +1,4 @@ { - "release": "0.10.2", - "tag": "v0.10.2" + "release": "0.11.0", + "tag": "v0.11.0" } \ No newline at end of file diff --git a/okitweb/static/okit/model/js/artefacts/compartment.js b/okitweb/static/okit/model/js/artefacts/compartment.js index 9f7166a2f..235db240f 100644 --- a/okitweb/static/okit/model/js/artefacts/compartment.js +++ b/okitweb/static/okit/model/js/artefacts/compartment.js @@ -43,7 +43,7 @@ class Compartment extends OkitArtifact { ** Delete Processing */ deleteChildren() { - console.groupCollapsed('Deleting Children of ' + this.getArtifactReference() + ' : ' + this.display_name); + console.log('Deleting Children of ' + this.getArtifactReference() + ' : ' + this.display_name); // Remove Compartments this.getOkitJson().compartments = this.getOkitJson().compartments.filter(function(child) { if (child.compartment_id === this.id && child.id !== this.id) { @@ -89,7 +89,7 @@ class Compartment extends OkitArtifact { } return true; }, this); - console.groupEnd(); + console.log(); // Dynamic Routing Gateways this.getOkitJson().dynamic_routing_gateways = this.getOkitJson().dynamic_routing_gateways.filter(function(child) { if (child.compartment_id === this.id) { diff --git a/okitweb/static/okit/model/js/artefacts/fragment.js b/okitweb/static/okit/model/js/artefacts/fragment.js index 07af063e4..971c39a41 100644 --- a/okitweb/static/okit/model/js/artefacts/fragment.js +++ b/okitweb/static/okit/model/js/artefacts/fragment.js @@ -27,12 +27,12 @@ class Fragment extends OkitJson { get target_type() {return this.target.type;} updateIds() { - console.group('Updating Ids'); + console.log('Updating Ids'); // Regenerate all Ids so the fragment can be dropped multiple times let id_map = {}; this.updatePrimaryIds(this, id_map); this.updateIdAssociations(this, id_map); - console.groupEnd(); + console.log(); } updatePrimaryIds(fragment_json, id_map) { diff --git a/okitweb/static/okit/model/js/artefacts/subnet.js b/okitweb/static/okit/model/js/artefacts/subnet.js index a3e3c9228..b6327b3eb 100644 --- a/okitweb/static/okit/model/js/artefacts/subnet.js +++ b/okitweb/static/okit/model/js/artefacts/subnet.js @@ -47,7 +47,7 @@ class Subnet extends OkitArtifact { ** Delete Processing */ deleteChildren() { - console.groupCollapsed('Deleting Children of ' + this.getArtifactReference() + ' : ' + this.display_name); + console.log('Deleting Children of ' + this.getArtifactReference() + ' : ' + this.display_name); // Remove Instances this.getOkitJson().instances = this.getOkitJson().instances.filter(function(child) { if (child.primary_vnic.subnet_id === this.id) { @@ -84,7 +84,7 @@ class Subnet extends OkitArtifact { } return true; }, this); - console.groupEnd(); + console.log(); } /* diff --git a/okitweb/static/okit/model/js/artefacts/virtual_cloud_network.js b/okitweb/static/okit/model/js/artefacts/virtual_cloud_network.js index 13f1a8393..0c93de00c 100644 --- a/okitweb/static/okit/model/js/artefacts/virtual_cloud_network.js +++ b/okitweb/static/okit/model/js/artefacts/virtual_cloud_network.js @@ -39,7 +39,7 @@ class VirtualCloudNetwork extends OkitArtifact { ** Delete Processing */ deleteChildren() { - console.groupCollapsed('Deleting Children of ' + this.getArtifactReference() + ' : ' + this.display_name); + console.log('Deleting Children of ' + this.getArtifactReference() + ' : ' + this.display_name); // Remove Subnets this.getOkitJson().subnets = this.getOkitJson().subnets.filter(function(child) { if (child.vcn_id === this.id) { @@ -103,7 +103,16 @@ class VirtualCloudNetwork extends OkitArtifact { } return true; }, this); - console.groupEnd(); + // Network Security Groups + this.getOkitJson().network_security_groups = this.getOkitJson().network_security_groups.filter(function(child) { + if (child.vcn_id === this.id) { + console.info('Deleting ' + child.display_name); + child.delete(); + return false; // So the filter removes the element + } + return true; + }, this); + console.log(); } /* diff --git a/okitweb/static/okit/model/js/okit_model.js b/okitweb/static/okit/model/js/okit_model.js index 158fe2ae0..9615706a6 100644 --- a/okitweb/static/okit/model/js/okit_model.js +++ b/okitweb/static/okit/model/js/okit_model.js @@ -13,7 +13,7 @@ class OkitJson { */ constructor(okit_json_string = '') { this.title = "OKIT OCI Visualiser Json"; - this.description = "OKIT Generic OCI Json which can be used to generate ansible, terraform, ......."; + this.description = ""; this.okit_version = okitVersion; this.compartments = []; this.autonomous_databases = []; @@ -48,7 +48,10 @@ class OkitJson { ** Load Simple Json Structure and build Object Based JSON */ load(okit_json) { - console.groupCollapsed('Load OKIT Json'); + console.log('Load OKIT Json'); + // Title & Description + this.title = okit_json.title; + this.description = okit_json.description; // Compartments if (okit_json.hasOwnProperty('compartments')) { for (let artefact of okit_json['compartments']) { @@ -210,7 +213,7 @@ class OkitJson { console.info(obj); } } - console.groupEnd(); + console.log(); } /* @@ -902,10 +905,10 @@ class OkitArtifact { ** Delete Processing */ delete() { - console.groupCollapsed('Delete (Default) ' + this.getArtifactReference() + ' : ' + this.id); + console.log('Delete (Default) ' + this.getArtifactReference() + ' : ' + this.id); // Delete Child Artifacts this.deleteChildren(); - console.groupEnd(); + console.log(); } deleteChildren() { diff --git a/okitweb/static/okit/palette/hidden/Customer_Premise.svg b/okitweb/static/okit/palette/hidden/Customer_Premise.svg new file mode 100755 index 000000000..9fbb5e8b8 --- /dev/null +++ b/okitweb/static/okit/palette/hidden/Customer_Premise.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/okitweb/static/Instance_Pool.svg b/okitweb/static/okit/palette/hidden/Instance_Pool.svg similarity index 100% rename from okitweb/static/Instance_Pool.svg rename to okitweb/static/okit/palette/hidden/Instance_Pool.svg diff --git a/okitweb/static/okit/palette/hidden/Ipsec.svg b/okitweb/static/okit/palette/hidden/Ipsec.svg new file mode 100755 index 000000000..5bf861b54 --- /dev/null +++ b/okitweb/static/okit/palette/hidden/Ipsec.svg @@ -0,0 +1,14 @@ + + + + + + + diff --git a/okitweb/static/okit/palette/hidden/Waf.svg b/okitweb/static/okit/palette/hidden/Waf.svg new file mode 100755 index 000000000..73edc5d52 --- /dev/null +++ b/okitweb/static/okit/palette/hidden/Waf.svg @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/okitweb/static/okit/query/oci/js/okit_query.js b/okitweb/static/okit/query/oci/js/okit_query.js index f7717e4f5..64cc8849b 100644 --- a/okitweb/static/okit/query/oci/js/okit_query.js +++ b/okitweb/static/okit/query/oci/js/okit_query.js @@ -14,7 +14,7 @@ class OkitOCIQuery { query(request = null, complete_callback) { this.complete_callback = complete_callback; - if (request && request !== null) { + if (request) { for (const [i, region] of this.regions.entries()) { console.info(`${i} - Processing Selected Region : ${region}`); let region_request = JSON.clone(request); @@ -31,7 +31,7 @@ class OkitOCIQuery { } isComplete() { - if (this.complete_callback && this.complete_callback !== null) { + if (this.complete_callback) { console.info(this.region_query_count); for (let key of Object.keys(this.region_query_count)) { if (this.region_query_count[key] > 0) { @@ -163,7 +163,11 @@ class OkitOCIQuery { }); } queryCompartmentSubComponents(request) { - this.queryCompartments(request); + console.info('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Request >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'); + console.info(request); + if (request.sub_compartments) { + this.queryCompartments(request); + } this.queryVirtualCloudNetworks(request); this.queryBlockStorageVolumes(request); this.queryDynamicRoutingGateways(request); @@ -171,6 +175,7 @@ class OkitOCIQuery { this.queryObjectStorageBuckets(request); this.queryFastConnects(request); this.queryInstances(request); + //this.queryInstancePools(request); this.queryDatabaseSystems(request); this.queryFileStorageSystems(request); this.queryOkeClusters(request); @@ -322,6 +327,36 @@ class OkitOCIQuery { }); } + queryInstancePools(request) { + console.info('------------- Instance Pool Query --------------------'); + console.info('------------- Compartment : ' + request.compartment_id); + console.info('------------- Subnet : ' + request.subnet_id); + let me = this; + this.region_query_count[request.region]++; + $.ajax({ + type: 'get', + url: 'oci/artefacts/InstancePool', + dataType: 'text', + contentType: 'application/json', + data: JSON.stringify(request), + success: function (resp) { + let response_json = JSON.parse(resp); + regionOkitJson[request.region].load({instance_pools: response_json}); + for (let artefact of response_json) { + console.info(artefact.display_name); + } + if (request.refresh) {okitJsonView.draw();} + }, + error: function (xhr, status, error) { + console.warn('Status : ' + status); + console.warn('Error : ' + error); + }, + complete: function () { + me.region_query_count[request.region]-- && me.isComplete(); + } + }); + } + queryInternetGateways(request) { console.info('------------- Internet Gateway Query --------------------'); console.info('------------- Compartment : ' + request.compartment_id); diff --git a/okitweb/static/okit/view/designer/js/artefacts/autonomous_database.js b/okitweb/static/okit/view/designer/js/artefacts/autonomous_database.js index b3a40f7ea..6e6019575 100644 --- a/okitweb/static/okit/view/designer/js/artefacts/autonomous_database.js +++ b/okitweb/static/okit/view/designer/js/artefacts/autonomous_database.js @@ -45,7 +45,7 @@ class AutonomousDatabaseView extends OkitDesignerArtefactView { */ // Additional draw Processing draw() { - console.group('Drawing ' + this.getArtifactReference() + ' : ' + this.getArtefact().id + ' [' + this.parent_id + ']'); + console.log('Drawing ' + this.getArtifactReference() + ' : ' + this.getArtefact().id + ' [' + this.parent_id + ']'); let svg = super.draw(); /* ** Add Properties Load Event to created svg. We require the definition of the local variable "me" so that it can @@ -72,7 +72,7 @@ class AutonomousDatabaseView extends OkitDesignerArtefactView { .attr("data-connector-id", this.id) .attr("dragable", true); } - console.groupEnd(); + console.log(); return svg; } // Return Artifact Specific Definition. @@ -114,10 +114,20 @@ class AutonomousDatabaseView extends OkitDesignerArtefactView { } // Load Reference Ids // Network Security Groups - let network_security_groups_select = $(jqId('nsg_ids')); + this.loadNetworkSecurityGroups('nsg_ids', this.subnet_id); + /* + let network_security_groups_select = d3.select(d3Id('nsg_ids')); for (let network_security_group of okitJson.network_security_groups) { - network_security_groups_select.append($('