Skip to content

Commit d8044c3

Browse files
committed
Automation Toolkit Release v2025.1.0
1 parent b54b944 commit d8044c3

File tree

6 files changed

+63
-53
lines changed

6 files changed

+63
-53
lines changed

cd3_automation_toolkit/Database/create_terraform_mysql_db.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct):
5252
for i in df.index:
5353
region = str(df.loc[i, 'Region']).strip().lower()
5454

55+
if (region in commonTools.endNames):
56+
break
57+
region=region.strip().lower()
58+
5559
# Skip if region is not in regions
5660
if region not in [x.lower() for x in ct.all_regions]:
5761
print(f"\nERROR!!! Invalid Region {str(df.loc[i, 'Region']).strip()} in MySQL DB System sheet. Skipping row!", file=sys.stderr)
@@ -68,7 +72,8 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct):
6872
# Initialize the template dictionary
6973
tempdict = {
7074
'display_tf_name': commonTools.check_tf_variable(str(df.loc[i, 'Display Name']).strip()),
71-
'compartment_name': str(df.loc[i, 'Compartment Name']).strip(),
75+
#'compartment_name': str(df.loc[i, 'Compartment Name']).strip(),
76+
'compartment_name': commonTools.check_tf_variable(str(df.loc[i, 'Compartment Name']).strip()),
7277
'display_name': str(df.loc[i, 'Display Name']).strip(),
7378
'description': str(df.loc[i, 'Description']).strip(),
7479
'hostname_label': str(df.loc[i, 'Hostname Label']).strip(),
@@ -102,23 +107,39 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct):
102107
# Split into compartment and name
103108
config_parts = config_id.split('@')
104109
if len(config_parts) == 2:
105-
config_compartment_name = config_parts[0].strip()
110+
config_compartment_name = commonTools.check_tf_variable(config_parts[0].strip())
106111
config_name = config_parts[1].strip()
107112

108113
# Set both the configuration_id and configuration_compartment_id
109114
tempdict['configuration_compartment_id'] = config_compartment_name
110115
tempdict['configuration_id'] = config_name
116+
# Add depends_on attribute to ensure MySQL configuration is created first
117+
tempdict['depends_on_mysql_configuration'] = True
111118
else:
112-
print(f"\nWARNING: Invalid configuration_id format: {config_id}. Expected format: compartment@name", file=sys.stderr)
119+
print(f"\nWARNING: Invalid configuration_id format: {config_id}. Expected format: compartment@name",
120+
file=sys.stderr)
113121
tempdict['configuration_id'] = config_id
114-
tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default
122+
tempdict['configuration_compartment_id'] = tempdict[
123+
'compartment_name'] # Use MySQL compartment as default
124+
tempdict['depends_on_mysql_configuration'] = False
115125
else:
116-
# If it's not in compartment@name format, use it directly (assuming it's an OCID)
117-
tempdict['configuration_id'] = config_id
118-
tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default
126+
# If it's not in compartment@name format, check if it's an OCID or just a name
127+
if config_id.startswith('ocid1.'):
128+
# It's an OCID, no dependency needed
129+
tempdict['configuration_id'] = config_id
130+
tempdict['configuration_compartment_id'] = tempdict[
131+
'compartment_name'] # Use MySQL compartment as default
132+
tempdict['depends_on_mysql_configuration'] = False
133+
else:
134+
# It's just a name, we need to add dependency
135+
tempdict['configuration_id'] = config_id
136+
tempdict['configuration_compartment_id'] = tempdict[
137+
'compartment_name'] # Use MySQL compartment as default
138+
tempdict['depends_on_mysql_configuration'] = True
119139
else:
120140
tempdict['configuration_id'] = ''
121141
tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default
142+
tempdict['depends_on_mysql_configuration'] = False
122143

123144
# Process Availability Domain
124145
ad = str(df.loc[i, 'Availability Domain(AD1|AD2|AD3)']).strip()
@@ -139,7 +160,7 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct):
139160
if subnet_name and subnet_name.lower() != 'nan':
140161
subnet_parts = subnet_name.split('@')
141162
if len(subnet_parts) == 2:
142-
network_compartment = subnet_parts[0].strip()
163+
network_compartment = commonTools.check_tf_variable(subnet_parts[0].strip())
143164
vcn_subnet = subnet_parts[1].strip()
144165
vcn_subnet_parts = vcn_subnet.split('::')
145166
if len(vcn_subnet_parts) == 2:

cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
'zurich': 'eu-zurich-1'
4242
}
4343

44-
def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, row):
44+
def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, mysql_aas_client):
4545
mysql_tf_name = commonTools.check_tf_variable(mysql_db.display_name)
4646
mysql_subnet_id = mysql_db.subnet_id
4747

@@ -66,40 +66,24 @@ def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment
6666
if hasattr(mysql_db, 'configuration_id') and mysql_db.configuration_id:
6767
config_id = mysql_db.configuration_id
6868
try:
69-
# Create MySQL client with the same config as the parent client
70-
config_copy = dict(vnc_client.base_client.config)
71-
# Create a copy of the config and set the region from Excel row
72-
config_copy = config_copy.copy()
73-
excel_region = row['Region'].lower().strip()
74-
config_copy['region'] = region_mapping.get(excel_region, excel_region)
69+
config_obj = mysql_aas_client.get_configuration(mysql_db.configuration_id).data
70+
except Exception as e2:
71+
print(f"\nWarning2: Could not fetch configuration details for {mysql_db.display_name}: {str(e2)}")
72+
config_obj = None
7573

76-
# Try with both client types
77-
try:
78-
mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=vnc_client.base_client.signer)
79-
config_obj = mysql_client.get_configuration(mysql_db.configuration_id).data
80-
except Exception as e1:
81-
try:
82-
mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=vnc_client.base_client.signer)
83-
config_obj = mysql_client.get_configuration(mysql_db.configuration_id).data
84-
except Exception as e2:
85-
print(f"\nWarning2: Could not fetch configuration details for {mysql_db.display_name}: {str(e2)}")
86-
config_obj = None
87-
88-
if hasattr(config_obj, 'display_name'):
89-
config_name = config_obj.display_name
74+
if hasattr(config_obj, 'display_name'):
75+
config_name = config_obj.display_name
9076

91-
# Get configuration compartment name
92-
for comp_name, comp_id in ct.ntk_compartment_ids.items():
93-
if comp_id == config_obj.compartment_id:
94-
config_compartment_name = comp_name
95-
break
77+
# Get configuration compartment name
78+
for comp_name, comp_id in ct.ntk_compartment_ids.items():
79+
if comp_id == config_obj.compartment_id:
80+
config_compartment_name = comp_name
81+
break
9682

97-
# Format configuration name similar to subnet_name
98-
if config_compartment_name and config_name:
99-
config_id = config_compartment_name +'@' + config_name
83+
# Format configuration name similar to subnet_name
84+
if config_compartment_name and config_name:
85+
config_id = config_compartment_name +'@' + config_name
10086

101-
except Exception as e:
102-
print(f"\nWarning1: Could not fetch configuration details for {mysql_db.display_name}: {str(e)}")
10387

10488
# Check if resource exists in terraform state
10589
tf_resource = f'module.mysql_db_system[\\"{mysql_tf_name}\\"].oci_mysql_mysql_db_system.db_system'
@@ -125,9 +109,6 @@ def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment
125109
values_for_column[col_header].append(config_name)
126110
else:
127111
values_for_column[col_header].append("")
128-
elif col_header == 'Hostname Label':
129-
hostname = mysql_db.hostname_label if mysql_db.hostname_label else mysql_db.display_name.lower().replace("-", "")
130-
values_for_column[col_header].append(hostname)
131112
elif col_header == 'Shape':
132113
values_for_column[col_header].append(mysql_db.shape_name)
133114
elif col_header == 'Network Details':
@@ -244,14 +225,14 @@ def export_mysql_db(inputfile, outdir, service_dir, config, signer, ct, export_c
244225

245226
region = reg.capitalize()
246227
vnc_client = oci.core.VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer)
228+
mysql_client = oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer)
229+
mysql_aas_client = oci.mysql.MysqlaasClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer)
247230

248231
for ntk_compartment_name in export_compartments:
249-
mysql_dbs = oci.pagination.list_call_get_all_results(oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer).list_db_systems,
250-
compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],
251-
lifecycle_state="ACTIVE")
232+
mysql_dbs = oci.pagination.list_call_get_all_results(mysql_client.list_db_systems,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],lifecycle_state="ACTIVE")
252233
for mysql_db in mysql_dbs.data:
253234

254-
mysql_db = oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer).get_db_system(mysql_db.id).data
235+
mysql_db = mysql_client.get_db_system(mysql_db.id).data
255236
# Tags filter
256237
defined_tags = mysql_db.defined_tags
257238
tags_list = []
@@ -268,7 +249,7 @@ def export_mysql_db(inputfile, outdir, service_dir, config, signer, ct, export_c
268249
if check == False:
269250
continue
270251

271-
print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, df.iloc[0])
252+
print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, mysql_aas_client)
272253

273254
commonTools.write_to_cd3(values_for_column, cd3file, sheetName)
274255
print("{0} MySQL Database Systems exported into CD3.\n".format(len(values_for_column["Region"])))

cd3_automation_toolkit/Database/templates/mysql-template

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,18 @@ mysql_db_system = {
2424
mysql_db_system_availability_domain = "{{ availability_domain }}"
2525
mysql_db_system_fault_domain = "{{ fault_domain }}"
2626
configuration_compartment_id = "{{ configuration_compartment_id }}"
27+
{% if depends_on_mysql_configuration %}
28+
# Skip data source lookup for configurations created in the same Terraform run
29+
skip_datasource_lookup = true
30+
# Use the configuration name directly
31+
configuration_name = "{{ configuration_id }}"
32+
# Set an empty configuration_id to force the module to use the name
33+
configuration_id = ""
34+
# Add explicit depends_on to ensure configuration is created first
35+
depends_on = ["module.mysql_configurations[\"{{ configuration_id }}\"]"]
36+
{% else %}
2737
configuration_id = "{{ configuration_id }}"
38+
{% endif %}
2839
mysql_shape_name = "{{ shape }}"
2940
vcn_names = "{{ vcn_names }}"
3041
subnet_id = "{{ subnet_id }}"

cd3_automation_toolkit/Excel_Columns

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"Users" :
1212
{
1313
"Family Name" : "family_name",
14-
"User Name" : "name"
14+
"User Name" : "name",
15+
"MFA Status" : "urn_ietf_params_scim_schemas_oracle_idcs_extension_mfa_user.mfa_status"
1516
},
1617
"Policies" :
1718
{

cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -974,6 +974,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp
974974
igw_info = None
975975
ngw_info = None
976976
sgw_info = None
977+
drg_info = None
977978
drg_attachment_info = None
978979

979980
for drg_attachment_info in DRG_Attachments.data:

cd3_automation_toolkit/setUpOCI.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,11 +1437,6 @@ def create_mysql(execute_all=False,prim_options=[]):
14371437
Option('Add/Modify/Delete MySQL DB Systems', Database.create_terraform_mysql_db, 'Processing MySQL-DBSystems Tab'),
14381438
Option('Add/Modify/Delete MySQL Configurations', Database.create_terraform_mysql_configuration, 'Processing MySQL-Configurations Tab'),
14391439
]
1440-
if prim_options:
1441-
options = match_options(options, prim_options)
1442-
else:
1443-
if not execute_all:
1444-
options = show_options(options, quit=True, menu=True, index=1)
14451440
execute_options(options, inputfile, outdir, service_dir_mysql_dbsystem, prefix, ct)
14461441
# Update modified path list
14471442
update_path_list(regions_path=subscribed_regions, service_dirs=[service_dir_mysql_dbsystem])

0 commit comments

Comments
 (0)