diff --git a/ci/flavor_info_miner.py b/ci/flavor_info_miner.py new file mode 100644 index 0000000000000000000000000000000000000000..a4314d8f92a14c1c98a85b7eef609737ba3d6d66 --- /dev/null +++ b/ci/flavor_info_miner.py @@ -0,0 +1,89 @@ +import yaml +import argparse +import csv + + +#Author: Jaromir Hradil 506487@mail.muni.cz + +#This script gathers info from hiera about flavors +#Then it generates table in Markdown format. + +#Setting arguments +parser = argparse.ArgumentParser(description='This script generates table with flavor info.') + +parser.add_argument('--hiera-file', type=str, required=True, help='Path for hiera file flavors.yaml') + +parser = parser.parse_args() + +#Opening file +with open(parser.hiera_file,'r') as f: + data = yaml.safe_load(f) + + +data = data['cloud::profile::kolla::nova::controller::os_flavors'] + + + +#Names for columns +details = ['Flavor name' , 'CPU' , 'RAM (in GB)' , 'HPC' , 'SSD' , 'Disc throughput (in MB per second)' , 'IOPS', 'Net average througput (in MB per second)', 'GPU'] + +blacklist = ['cerit.hde-half', 'cerit.hde', 'meta.mema2', 'csirtmu.tiny1x2', 'csirtmu.tiny1x4', 'csirtmu.small2x4', 'csirtmu.small2x8', 'csirtmu.medium4x8', 'csirtmu.medium4x16', +'csirtmu.large8x16', 'csirtmu.large4x32', 'csirtmu.large8x32', 'csirtmu.jumbo16x32', 'csirtmu.jumbo8x64', 'csirtmu.jumbo16x64', 'du.perftest', 'admin.scaletest', 'hpc.18core-64ram-dukan', +'hpc.8core-32ram-dukan'] + +blacklist_dict = dict.fromkeys(blacklist) + + + +final_out = [] + + +#Printing specified data +for x in range(0,len(data)): + + + if(data[x]['name'] in blacklist_dict): + continue + + if not ('aggregate_instance_extra_specs:hpc' in data[x]['extra_specs']): + hpc = 'No' + else: + hpc = 'No' if (data[x]['extra_specs']['aggregate_instance_extra_specs:hpc'] == 'false') else 'Yes' + + if not ('aggregate_instance_extra_specs:ssd' in data[x]['extra_specs']): + ssd = 'No' + else: + ssd = 'No' if (data[x]['extra_specs']['aggregate_instance_extra_specs:ssd'] == 'false') else 'Yes' + + gpu = 'No' + + if ('pci_passthrough:alias' in data[x]['extra_specs']): + + if(data[x]['extra_specs']['pci_passthrough:alias'].find('gpu') != -1): + gpu = 'Yes' + + name = data[x]['name'] + vcpus = data[x]['vcpus'] + ram = data[x]['ram']/1024 + + #more readable format + disk = data[x]['extra_specs']['quota:disk_total_bytes_sec'] / 1000000 if 'quota:disk_total_bytes_sec' in data[x]['extra_specs'] else 'Unlimited' + net = data[x]['extra_specs']['quota:vif_outbound_average'] / 1000 if 'quota:vif_outbound_average' in data[x]['extra_specs'] else 'Unlimited' + iops = data[x]['extra_specs']['quota:disk_total_iops_sec'] if 'quota:disk_total_iops_sec' in data[x]['extra_specs'] else 'Unlimited' + + #Printing final table sorted + final_out.append([f'{name}', f'{vcpus}', f'{ram:.0f}', f'{hpc}' , f'{ssd}',\ + f'{disk}', f'{iops}', f'{net}', f'{gpu}']) + + + + +with open('flavors.csv', 'w', newline='') as csvfile: + + writer = csv.DictWriter(csvfile, fieldnames=details) + writer.writeheader() + + for x in range(0,len(final_out)): +#['Flavor name' , 'CPU' , 'RAM (in GB)' , 'HPC' , 'SSD' , 'Disc throughput (in MB per second)' , 'IOPS', 'Net average througput (in MB per second)', 'GPU'] + writer.writerow({details[0] : final_out[x][0], details[1] : final_out[x][1], details[2] : final_out[x][2], details[3] : final_out[x][3],details[4] : final_out[x][4],\ + details[5] : final_out[x][5],details[6] : final_out[x][6],details[7] : final_out[x][7],details[8] : final_out[x][8]}) \ No newline at end of file