Skip to content

Commit 53d9280

Browse files
committed
Automation Toolkit Release v2025.1.0
1 parent c40d112 commit 53d9280

31 files changed

+2846
-154
lines changed

cd3_automation_toolkit/Database/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from .export_exa_vmclusters_nonGreenField import export_exa_vmclusters
99
from .export_exa_infra_nonGreenField import export_exa_infra
1010
from .export_adb_nonGreenField import export_adbs
11-
from .create_terraform_mysql import create_terraform_mysql
11+
from .create_terraform_mysql_db import create_terraform_mysql_db
1212
from .create_terraform_mysql_configuration import create_terraform_mysql_configuration
13-
from .export_mysql_nonGreenField import export_mysql, export_mysqls
13+
from .export_mysql_db_nonGreenField import export_mysql_db
1414
from .export_mysql_configuration_nonGreenField import export_mysql_configuration, export_mysql_configurations
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
#!/usr/bin/python3
2+
# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
3+
#
4+
# This script will produce a Terraform file that will be used to set up OCI Database
5+
# MySQL Configuration
6+
#
7+
# Author: Generated by Cascade
8+
# Oracle Consulting
9+
#
10+
11+
import os
12+
import re
13+
from jinja2 import Environment, FileSystemLoader
14+
from oci.config import DEFAULT_LOCATION
15+
from pathlib import Path
16+
from commonTools import *
17+
18+
def create_terraform_mysql_configuration(inputfile, outdir, service_dir, prefix, ct):
19+
filename = inputfile
20+
sheetName = "MySQL-Configurations"
21+
auto_tfvars_filename = prefix + '_' + sheetName.lower() + '.auto.tfvars'
22+
23+
# Initialize tracking variables
24+
prev_values = {
25+
'region': '',
26+
'compartment_name': '',
27+
'display_name': '',
28+
'description': '',
29+
'shape_name': ''
30+
}
31+
32+
tfStr = {}
33+
mysql_config_vars = {}
34+
35+
# Load the template file
36+
file_loader = FileSystemLoader(f'{Path(__file__).parent}/templates')
37+
env = Environment(loader=file_loader, keep_trailing_newline=True, trim_blocks=True, lstrip_blocks=True)
38+
template = env.get_template('mysql-configuration-template')
39+
40+
# Add custom functions to template environment
41+
def make_config_keys(config):
42+
return lambda: config.keys()
43+
def make_config_value(config):
44+
return lambda key: config.get(key, '')
45+
env.globals['config_keys'] = None
46+
env.globals['config_value'] = None
47+
48+
# Read cd3 using pandas dataframe
49+
df, col_headers = commonTools.read_cd3(filename, sheetName)
50+
df = df.dropna(how='all')
51+
df = df.reset_index(drop=True)
52+
53+
# List of column headers
54+
dfcolumns = df.columns.values.tolist()
55+
56+
# Initialize empty TF string for each region
57+
for reg in ct.all_regions:
58+
tfStr[reg] = ''
59+
srcdir = outdir + "/" + reg + "/" + service_dir + "/"
60+
resource = sheetName.lower()
61+
commonTools.backup_file(srcdir, resource, auto_tfvars_filename)
62+
mysql_config_vars[reg] = {}
63+
64+
# Process each row
65+
for i in df.index:
66+
# Get values from row
67+
region = str(df.loc[i, 'Region']).strip()
68+
compartment_name = str(df.loc[i, 'Compartment Name']).strip()
69+
display_name = str(df.loc[i, 'Display Name']).strip()
70+
description = str(df.loc[i, 'Description']).strip()
71+
shape_name = str(df.loc[i, 'Shape Name']).strip()
72+
73+
# Handle empty values using previous values
74+
if region.lower() == 'nan' or region == '':
75+
region = prev_values['region']
76+
if compartment_name.lower() == 'nan' or compartment_name == '':
77+
compartment_name = prev_values['compartment_name']
78+
if display_name.lower() == 'nan' or display_name == '':
79+
display_name = prev_values['display_name']
80+
if description.lower() == 'nan' or description == '':
81+
description = prev_values['description']
82+
if shape_name.lower() == 'nan' or shape_name == '':
83+
shape_name = prev_values['shape_name']
84+
85+
# Update previous values
86+
prev_values.update({
87+
'region': region,
88+
'compartment_name': compartment_name,
89+
'display_name': display_name,
90+
'description': description,
91+
'shape_name': shape_name
92+
})
93+
94+
# Skip if essential values are missing
95+
if region.lower() == 'nan' or display_name.lower() == 'nan':
96+
continue
97+
98+
# Initialize region if needed
99+
region = region.strip().lower()
100+
if region not in ct.all_regions:
101+
print("\nERROR!!! Invalid Region; It should be one of the regions tenancy is subscribed to..Exiting!")
102+
exit(1)
103+
104+
# Check for variable row
105+
user_var_name = str(df.loc[i, 'users_variable_name']).strip()
106+
user_var_value = str(df.loc[i, 'users_variable_value']).strip()
107+
108+
# Initialize config if needed
109+
config_tf_name = commonTools.check_tf_variable(display_name)
110+
if config_tf_name not in mysql_config_vars[region]:
111+
mysql_config_vars[region][config_tf_name] = {
112+
'config_display_tf_name': config_tf_name,
113+
'compartment_tf_name': commonTools.check_tf_variable(compartment_name),
114+
'display_name': display_name,
115+
'description': description,
116+
'shape_name': shape_name
117+
}
118+
119+
# Only process variable if both name and value are present and not empty
120+
if (user_var_name.lower() != 'nan' and user_var_name != '' and
121+
user_var_value.lower() != 'nan' and user_var_value != ''):
122+
# Add variable with mysql_configuration_ prefix
123+
var_name = f"mysql_configuration_variables_{user_var_name}"
124+
# Handle boolean values
125+
if user_var_value.lower() in ['true', 'false']:
126+
mysql_config_vars[region][config_tf_name][var_name] = user_var_value.capitalize()
127+
else:
128+
mysql_config_vars[region][config_tf_name][var_name] = user_var_value
129+
130+
# Generate terraform configuration for each region
131+
for region in mysql_config_vars:
132+
if not mysql_config_vars[region]:
133+
continue
134+
135+
# Start with count = 0 to generate opening
136+
env.globals['count'] = 0
137+
tfStr[region] = template.render()
138+
139+
configs = list(mysql_config_vars[region].items())
140+
for i, (config_name, config) in enumerate(configs):
141+
# Update template functions for this config
142+
env.globals['config_keys'] = make_config_keys(config)
143+
env.globals['config_value'] = make_config_value(config)
144+
config['loop'] = {'last': i == len(configs) - 1}
145+
env.globals['count'] = 1
146+
147+
# Render configuration
148+
rendered_config = template.render(**config)
149+
tfStr[region] += rendered_config
150+
151+
# Add closing brace
152+
env.globals['count'] = 2
153+
tfStr[region] += template.render()
154+
155+
# Write files
156+
for region in tfStr:
157+
if tfStr[region] != '':
158+
srcdir = outdir + "/" + region + "/" + service_dir + "/"
159+
os.makedirs(srcdir, exist_ok=True)
160+
161+
outfile = srcdir + "/" + auto_tfvars_filename
162+
# Clean up the output
163+
tfStr[region] = tfStr[region].strip()
164+
# Fix any potential formatting issues
165+
tfStr[region] = re.sub(r'\s+mysql_configuration_variables_', '\n mysql_configuration_variables_', tfStr[region])
166+
tfStr[region] = re.sub(r'}\s*,\s*', '},\n', tfStr[region])
167+
tfStr[region] = re.sub(r'\n\s*\n\s*\n', '\n\n', tfStr[region])
168+
169+
with open(outfile, 'w') as f:
170+
f.write(tfStr[region])
171+
print(f"Created MySQL configuration for region {region} in {outfile}")

0 commit comments

Comments
 (0)