Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Toxophilist/sprint 11 #134

Merged
merged 3 commits into from
Oct 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions okitweb/okitOci.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,9 +341,8 @@ def dropdownQuery():
db_versions = OCIDatabaseVersions()
dropdown_json["db_versions"] = sorted(db_versions.list(), key=lambda k: k['version'])
# CPE Device Shapes
# TODO: Upgrade OCI Python Module
#cpe_device_shapes = OCICpeDeviceShapes()
#dropdown_json["cpe_device_shapes"] = sorted(cpe_device_shapes.list(), key=lambda k: k['cpe_device_info']['vendor'])
cpe_device_shapes = OCICpeDeviceShapes()
dropdown_json["cpe_device_shapes"] = sorted(cpe_device_shapes.list(), key=lambda k: k['cpe_device_info']['vendor'])
# Fast Connect Provider Services
fast_connect_provider_services = OCIFastConnectProviderServices()
dropdown_json["fast_connect_provider_services"] = sorted(fast_connect_provider_services.list(), key=lambda k: k['provider_name'])
Expand All @@ -358,7 +357,7 @@ def dropdownQuery():
dropdown_json["mysql_configurations"] = sorted(mysql_configurations.list(), key=lambda k: k['display_name'])
# Instance Shapes
oci_loadbalancer_shapes = OCILoadBalancerShapes()
dropdown_json["loadbalancer_shapes"] = oci_loadbalancer_shapes.list()
dropdown_json["loadbalancer_shapes"] = sorted(oci_loadbalancer_shapes.list(), key=lambda k: k['name'])
return dropdown_json
else:
return 'Unknown Method', 500
Expand Down
4 changes: 4 additions & 0 deletions okitweb/static/okit/js/okit.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,10 @@ class OkitOCIData {
return [...new Set(images)].sort((a, b) => b - a);
}

getLoadBalaancerShapes() {
return this.loadbalancer_shapes;
}

getMySQLConfigurations(shape_name='') {
if (shape_name === '') {
return this.mysql_configurations;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ class LoadBalancerView extends OkitDesignerArtefactView {
}
// Build Network Security Groups
this.loadNetworkSecurityGroups('network_security_group_ids', this.subnet_ids[0]);
// Build Loadbalancer Shapes
this.loadLoadBalancerShapes('shape');
// Load Properties
loadPropertiesSheet(me.artefact);
});
Expand Down
8 changes: 8 additions & 0 deletions okitweb/static/okit/view/designer/js/okit_designer_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,14 @@ class OkitDesignerArtefactView extends OkitArtefactView {
}
}
}

loadLoadBalancerShapes(select_id) {
$(jqId(select_id)).empty();
const lb_select = $(jqId(select_id));
for (let shape of okitOciData.getLoadBalaancerShapes()) {
lb_select.append($('<option>').attr('value', shape.name).text(shape.name));
}
}
}

class OkitContainerDesignerArtefactView extends OkitContainerArtefactView {
Expand Down
59 changes: 29 additions & 30 deletions visualiser/generators/okitGenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,35 @@ def renderBlockStorageVolume(self, block_storage_volume):
logger.debug(self.create_sequence[-1])
return

def renderCompartment(self, compartment):
# Read Data
standardisedName = self.standardiseResourceName(compartment['name'])
resourceName = '{0:s}'.format(standardisedName)
self.jinja2_variables['resource_name'] = resourceName
self.jinja2_variables['output_name'] = compartment['name']
# Process Virtual Cloud Networks Data
logger.info('Processing Compartment Information {0!s:s}'.format(standardisedName))
# -- Define Variables
# --- Required
# ---- Root Compartment
self.jinja2_variables["root_compartment"] = compartment["root_compartment"]
# ---- Parent Compartment Id
if not compartment["root_compartment"]:
self.jinja2_variables["compartment_id"] = self.formatJinja2IdReference(self.standardiseResourceName(self.id_name_map[compartment['compartment_id']]))
# ---- Display Name
self.addJinja2Variable("display_name", compartment["name"], standardisedName)
# ---- Description
self.addJinja2Variable("description", compartment.get("description", compartment["name"]), standardisedName)
# --- Optional
# ---- Tags
self.renderTags(compartment)

# -- Render Template
jinja2_template = self.jinja2_environment.get_template("compartment.jinja2")
self.create_sequence.append(jinja2_template.render(self.jinja2_variables))
logger.debug(self.create_sequence[-1])
return

def renderCustomerPremiseEquipment(self, artefact):
# Read Data
standardisedName = self.standardiseResourceName(artefact['display_name'])
Expand Down Expand Up @@ -337,36 +366,6 @@ def renderCustomerPremiseEquipment(self, artefact):
logger.debug(self.create_sequence[-1])
return

def renderCompartment(self, compartment):
# Read Data
standardisedName = self.standardiseResourceName(compartment['name'])
resourceName = '{0:s}'.format(standardisedName)
self.jinja2_variables['resource_name'] = resourceName
self.jinja2_variables['output_name'] = compartment['name']
# Process Virtual Cloud Networks Data
logger.info('Processing Compartment Information {0!s:s}'.format(standardisedName))
# -- Define Variables
# --- Required
# ---- Root Compartment
self.jinja2_variables["root_compartment"] = compartment["root_compartment"]
# ---- Parent Compartment Id
if not compartment["root_compartment"]:
self.jinja2_variables["compartment_id"] = self.formatJinja2IdReference(self.standardiseResourceName(self.id_name_map[compartment['compartment_id']]))
# ---- Display Name
self.addJinja2Variable("display_name", compartment["name"], standardisedName)
# ---- Description
self.addJinja2Variable("description", compartment.get("description", compartment["name"]), standardisedName)
# --- Optional
# ---- Tags
self.renderTags(compartment)

# -- Render Template
jinja2_template = self.jinja2_environment.get_template("compartment.jinja2")
self.create_sequence.append(jinja2_template.render(self.jinja2_variables))
logger.info(self.create_sequence[-1])
logger.debug(self.create_sequence[-1])
return

def renderDatabaseSystem(self, database_system):
# Read Data
standardisedName = self.standardiseResourceName(database_system['display_name'])
Expand Down
101 changes: 101 additions & 0 deletions visualiser/okit_generate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#!/usr/bin/python3

"""Provide Module Description
"""

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
__author__ = ["Andrew Hopkinson (Oracle Cloud Solutions A-Team)"]
__version__ = "1.0.0.0"
__module__ = "okit_generate"

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#


import getopt
import sys

from common.okitCommon import readJsonFile
from common.okitLogging import getLogger
from generators.okitAnsibleGenerator import OCIAnsibleGenerator
from generators.okitTerraformGenerator import OCITerraformGenerator
from generators.okitResourceManagerGenerator import OCIResourceManagerGenerator

# Configure logging
logger = getLogger()

# Execute workflow
def processWorkflow(args):
try:
okit_json = readJsonFile(args["json"])
if args['format'].lower() == 'terraform':
generator = OCITerraformGenerator(args['templateroot'], args["outputdir"], okit_json, False)
elif args['format'].lower() == 'ansible':
generator = OCIAnsibleGenerator(args['templateroot'], args["outputdir"], okit_json, False)
elif args['format'].lower() == 'resource-manager':
generator = OCIResourceManagerGenerator(args['templateroot'], args["outputdir"], okit_json, False)
else:
logger.warn('Not a Valid Output Format : {0!s:s}'.format(args['format']))
logger.warn('Valid Options :')
logger.warn(' ansible : Generate Ansible Playbook')
logger.warn(' terraform : Generate Terraform Files')
logger.warn(' resource-manager : Generate Resource Manager Terraform Files')
raise Exception()
generator.generate()
generator.writeFiles()
except Exception:
pass
return


# Set default values for Args
def defaultArgs():
args = {}
args['json'] = "okit.json"
args['format'] = 'terraform'
args['outputdir'] = "./okit/generated"
args['template_root'] = '/okit/visualiser/templates'
return args


# Read Module Arguments
def readargs(opts, args):
moduleargs = defaultArgs()

# Read Module Command Line Arguments.
for opt, arg in opts:
if opt in ("-j", "--json"):
moduleargs['json'] = arg
elif opt in ("-o", "--outputdir"):
moduleargs['outputdir'] = arg
elif opt in ("-t", "--templateroot"):
moduleargs['templateroot'] = arg
elif opt in ("-f", "--format"):
moduleargs['format'] = arg

return moduleargs


# Main processing function
def main(argv):
# Configure Parameters and Options
options = 'j:f:o:t:'
longOptions = ['json=', 'format=', 'outputdir=', 'templateroot=']
# Get Options & Arguments
try:
opts, args = getopt.getopt(argv, options, longOptions)
# Read Module Arguments
moduleargs = readargs(opts, args)
processWorkflow(moduleargs)
except getopt.GetoptError:
usage()
except Exception as e:
print('Unknown Exception please check log file')
logger.exception(e)
sys.exit(1)

return


# Main function to kick off processing
if __name__ == "__main__":
main(sys.argv[1:])