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
def generate(language): logger.info('Language : {0:s} - {1:s}'.format(str(language), str(request.method))) logger.debug('JSON : {0:s}'.format(str(request.json))) if request.method == 'POST': use_vars = request.json.get("use_variables", True) try: destination_dir = tempfile.mkdtemp(); if language == 'terraform': generator = OCITerraformGenerator(template_root, destination_dir, request.json, use_vars=use_vars) elif language == 'ansible': generator = OCIAnsibleGenerator(template_root, destination_dir, request.json, use_vars=use_vars) elif language == 'terraform11': generator = OCITerraform11Generator(template_root, destination_dir, request.json) elif language == 'resource-manager': generator = OCIResourceManagerGenerator(template_root, destination_dir, request.json) generator.generate() generator.writeFiles() zipname = generator.createZipArchive(os.path.join(destination_dir, language), "/tmp/okit-{0:s}".format(str(language))) logger.info('Zipfile : {0:s}'.format(str(zipname))) shutil.rmtree(destination_dir) filename = os.path.split(zipname) logger.info('Split Zipfile : {0:s}'.format(str(filename))) return zipname except Exception as e: logger.exception(e) return str(e), 500 else: return send_from_directory('/tmp', "okit-{0:s}.zip".format(str(language)), mimetype='application/zip', as_attachment=True)
def generate(language, destination): logger.info('Language : {0:s} - {1:s}'.format(str(language), str(request.method))) logger.info('Destination : {0:s} - {1:s}'.format(str(destination), str(request.method))) logger.debug('JSON : {0:s}'.format(str(request.json))) if request.method == 'POST': use_vars = request.json.get("use_variables", True) try: if destination == 'git': git_url, git_branch = request.json['git_repository'].split('*') parsed_git_url = giturlparse.parse(git_url) generate_git_dir = os.path.abspath(os.path.join(bp.static_folder, 'git')) logger.info(generate_git_dir) if not os.path.exists(generate_git_dir): os.makedirs(generate_git_dir, exist_ok=True) git_repo_dir = os.path.abspath(os.path.join(generate_git_dir, parsed_git_url.name)) if os.path.exists(git_repo_dir): repo = Repo(git_repo_dir) repo.remotes.origin.pull() else: repo = Repo.clone_from(git_url, git_repo_dir, branch=git_branch, no_single_branch=True) repo.remotes.origin.pull() destination_dir = os.path.abspath(os.path.join(git_repo_dir, request.json['git_repository_filename'])) else: destination_dir = tempfile.mkdtemp(); if language == 'terraform': generator = OCITerraformGenerator(template_root, destination_dir, request.json, use_vars=use_vars) elif language == 'ansible': generator = OCIAnsibleGenerator(template_root, destination_dir, request.json, use_vars=use_vars) elif language == 'terraform11': generator = OCITerraform11Generator(template_root, destination_dir, request.json) elif language == 'resource-manager': generator = OCIResourceManagerGenerator(template_root, destination_dir, request.json) elif language == 'markdown': generator = OkitMarkdownGenerator(template_root, destination_dir, request.json) generator.generate() generator.writeFiles() if destination == 'git': git_commit_msg = request.json['git_repository_commitmsg'] repo.index.add(destination_dir) repo.index.commit("commit changes from okit:" + git_commit_msg) repo.remotes.origin.push(git_branch) return language.capitalize()+" files successfully uploaded to GIT Repository" else: zipname = generator.createZipArchive(os.path.join(destination_dir, language), "/tmp/okit-{0:s}".format(str(language))) logger.info('Zipfile : {0:s}'.format(str(zipname))) shutil.rmtree(destination_dir) filename = os.path.split(zipname) logger.info('Split Zipfile : {0:s}'.format(str(filename))) return zipname except Exception as e: logger.exception(e) return str(e), 500 else: return send_from_directory('/tmp', "okit-{0:s}.zip".format(str(language)), mimetype='application/zip', as_attachment=True)
def ociResourceManger(): if request.method == 'GET': query_string = request.query_string parsed_query_string = urllib.parse.unquote(query_string.decode()) query_json = json.loads(parsed_query_string) logJson(query_json) config_profile = query_json.get('location', {}).get('config_profile', 'DEFAULT') compartment_id = query_json.get('location', {}).get('compartment_id', None) region = query_json.get('location', {}).get('region', None) try: config = {'region': region} oci_resourcemanager = OCIResourceManagers( config=config, profile=config_profile, compartment_id=compartment_id) stacks = oci_resourcemanager.list() return json.dumps(stacks, sort_keys=False, indent=2, separators=(',', ': ')) except Exception as e: logger.exception(e) return str(e), 500 elif request.method == 'POST': logger.debug('JSON : {0:s}'.format(str(request.json))) config_profile = request.json.get('location', {}).get('config_profile', 'DEFAULT') compartment_id = request.json.get('location', {}).get('compartment_id', None) region = request.json.get('location', {}).get('region', None) plan_or_apply = request.json.get('location', {}).get('plan_or_apply', 'PLAN') create_or_update = request.json.get('location', {}).get('create_or_update', 'CREATE') stack_id = request.json.get('location', {}).get('stack_id', '') stack_name = request.json.get('location', {}).get( 'stack_name', 'okit-stack-{0!s:s}'.format(time.strftime('%Y%m%d%H%M%S'))) logger.info('Using Profile : {0!s:s}'.format(config_profile)) try: config = {'region': region} destination_dir = tempfile.mkdtemp() logger.debug(">>>>>>>>>>>>> {0!s:s}".format(destination_dir)) stack = {} stack['display_name'] = stack_name oci_compartments = OCICompartments(config=config, profile=config_profile) # Generate Resource Manager Terraform zip generator = OCIResourceManagerGenerator( template_root, destination_dir, request.json, tenancy_ocid=oci_compartments.getTenancy(), region=region, compartment_ocid=compartment_id) generator.generate() generator.writeFiles() zipname = generator.createZipArchive( os.path.join(destination_dir, 'resource-manager'), "/tmp/okit-resource-manager") logger.info('Zipfile : {0:s}'.format(str(zipname))) # Upload to Resource manager stack['compartment_id'] = compartment_id stack['zipfile'] = zipname stack['variables'] = generator.getVariables() resource_manager = OCIResourceManagers( config=config, profile=config_profile, compartment_id=compartment_id) if create_or_update == 'UPDATE': stack['id'] = stack_id stack_json = resource_manager.updateStack(stack) else: stack_json = resource_manager.createStack(stack) resource_manager.createJob(stack_json, plan_or_apply) return_code = 200 resource_manager.list() shutil.rmtree(destination_dir) return stack['display_name'], return_code except Exception as e: logger.exception(e) return str(e), 500 return
def generate(language): logger.info('Language : {0:s} - {1:s}'.format(str(language), str(request.method))) logger.debug('JSON : {0:s}'.format(str(request.json))) if request.method == 'POST': use_vars = request.json.get("use_variables", True) try: destination_dir = tempfile.mkdtemp(); gitpush_flag = False if language == 'terraformtogit': gitpush_flag = True language = 'terraform' if language == 'ansibletogit': gitpush_flag = True language = 'ansible' if language == 'terraform': generator = OCITerraformGenerator(template_root, destination_dir, request.json, use_vars=use_vars) elif language == 'ansible': generator = OCIAnsibleGenerator(template_root, destination_dir, request.json, use_vars=use_vars) elif language == 'terraform11': generator = OCITerraform11Generator(template_root, destination_dir, request.json) elif language == 'resource-manager': generator = OCIResourceManagerGenerator(template_root, destination_dir, request.json) generator.generate() generator.writeFiles() zipname = generator.createZipArchive(os.path.join(destination_dir, language), "/tmp/okit-{0:s}".format(str(language))) logger.info('Zipfile : {0:s}'.format(str(zipname))) if gitpush_flag: get_selection_details = request.json['git_repository'] git_url, git_branch = get_selection_details.split('*') git_file_name = request.json['git_repository_filename'] git_commit_msg = request.json['git_repository_commitmsg'] destination = '/okit/okitweb/static/okit/templates/tmpgit' repo = Repo.clone_from(git_url, destination, branch=git_branch, no_single_branch=True) repo.remotes.origin.pull() copyfrom = destination_dir+'/'+language copyto = destination +'/' + git_file_name if os.path.exists(copyto): return "Name already exists" else: os.makedirs(copyto) for item in os.listdir(copyfrom): s = os.path.join(copyfrom, item) d = os.path.join(copyto, item) shutil.copy2(s, d) repo.index.add(copyto) repo.index.commit("commit changes from okit:" + git_commit_msg) #origin = repo.remote('origin') #origin.push(git_branch) repo.remotes.origin.push(git_branch) os.system("rm -rf " + destination) shutil.rmtree(destination_dir) return language.capitalize()+" files successfully uploaded to GIT Repository" shutil.rmtree(destination_dir) filename = os.path.split(zipname) logger.info('Split Zipfile : {0:s}'.format(str(filename))) return zipname except Exception as e: logger.exception(e) return str(e), 500 else: return send_from_directory('/tmp', "okit-{0:s}.zip".format(str(language)), mimetype='application/zip', as_attachment=True)