Dynamically Pull Out Option Sections

Previously in the generation of the opts.py file, the option groups
were hard coded. Now, they are pulled out as the lines are parsed.
If a group doesn't already exist in the dictionary it gets added and
then the options are added to the section. If the group already exists,
the options are added to the proper section as you would expect, and if
the options being registered don't have a group, they are added to the
default section.

This patch also moves the check for a non-zero exit code from
oslo-config-generator to the right location in the file.  This
logic had been put too late in the file and was not catching
oslo-config-generator failures as it should have been.

Change-Id: I59c8067e8091d8bb212e3609f3a174ddc287707e
This commit is contained in:
Kendall Nelson 2015-12-03 18:10:39 -06:00 committed by Jay S Bryant
parent 03363ae6dd
commit 63600a34fb
3 changed files with 54 additions and 134 deletions

View File

@ -114,13 +114,7 @@ if __name__ == "__main__":
flag = False
registered_opts_dict = {'fc-zone-manager': [],
'keymgr': [],
'BRCD_FABRIC_EXAMPLE': [],
'CISCO_FABRIC_EXAMPLE': [],
'profiler': [],
'backend': [],
'DEFAULT': [], }
registered_opts_dict = {'DEFAULT': [], }
def _write_item(opts):
list_name = opts[-3:]
@ -177,113 +171,36 @@ if __name__ == "__main__":
if (exists != -1) or (key == 'cinder_volume_configuration'):
continue
if aline.find("fc-zone-manager") != -1:
fc_zm_list = _retrieve_name(aline)
replace_string = ", group='fc-zone-manager')"
fc_zm_list = fc_zm_list.replace(replace_string, '')
fc_zm_list = fc_zm_list.strip()
line = key + "." + fc_zm_list
registered_opts_dict['fc-zone-manager'].append(line)
elif aline.find("keymgr") != -1:
keymgr_list = _retrieve_name(aline)
keymgr_list = keymgr_list.replace(", group='keymgr')", '')
keymgr_list = keymgr_list.strip()
line = key + "." + keymgr_list
registered_opts_dict['keymgr'].append(line)
elif aline.find("BRCD_FABRIC_EXAMPLE") != -1:
brcd_list = _retrieve_name(aline)
replace_string = ", group='BRCD_FABRIC_EXAMPLE')"
brcd_list = brcd_list.replace(replace_string, '')
brcd_list = brcd_list.strip()
line = key + "." + brcd_list
registered_opts_dict['BRCD_FABRIC_EXAMPLE'].append(line)
elif aline.find("CISCO_FABRIC_EXAMPLE") != -1:
cisco_list = _retrieve_name(aline)
replace_string = ", group='CISCO_FABRIC_EXAMPLE')"
cisco_list = cisco_list.replace(replace_string, '')
cisco_list = cisco_list.strip()
line = key + "." + cisco_list
registered_opts_dict['CISCO_FABRIC_EXAMPLE'].append(line)
elif aline.find("profiler") != -1:
profiler_list = _retrieve_name(aline)
replace_string = ', group="profiler")'
profiler_list = profiler_list.replace(replace_string, '')
profiler_list = profiler_list.strip()
line = key + "." + profiler_list
registered_opts_dict['profiler'].append(line)
elif aline.find("backend") != -1:
backend_list = _retrieve_name(aline)
replace_string = ', group=backend)'
backend_list = backend_list.replace(replace_string, '')
backend_list = backend_list.strip()
line = key + "." + backend_list
registered_opts_dict['backend'].append(line)
group_exists = aline.find(', group=')
formatted_opt = _retrieve_name(aline[: group_exists])
formatted_opt = formatted_opt.replace(')', '').strip()
if group_exists != -1:
group_name = aline[group_exists:-1].replace(', group=\"\'', '').\
replace(', group=', '').strip("\'\")").upper()
if group_name in registered_opts_dict:
line = key + "." + formatted_opt
registered_opts_dict[group_name].append(line)
else:
line = key + "." + formatted_opt
registered_opts_dict[group_name] = [line]
else:
default_list = _retrieve_name(aline)
default_list = default_list.replace(')', '').strip()
line = key + "." + default_list
line = key + "." + formatted_opt
registered_opts_dict['DEFAULT'].append(line)
opt_dict[key] = registered_opts_dict
list_str = ("\n\n"
"def list_opts():\n"
" return [\n"
" ('DEFAULT',\n"
" itertools.chain(\n")
opt_file.write(list_str)
setup_str = ("\n\n"
"def list_opts():\n"
" return [\n")
opt_file.write(setup_str)
for item in registered_opts_dict["DEFAULT"]:
for key in registered_opts_dict:
section_start_str = (" ('" + key + "',\n"
" itertools.chain(\n")
opt_file.write(section_start_str)
for item in registered_opts_dict[key]:
_write_item(item)
section_end_str = " )),\n"
opt_file.write(section_end_str)
profiler_str = (" )),\n"
" ('profiler',\n"
" itertools.chain(\n")
opt_file.write(profiler_str)
for item in registered_opts_dict["profiler"]:
_write_item(item)
backend_str = (" )),\n"
" ('backend',\n"
" itertools.chain(\n")
opt_file.write(backend_str)
for item in registered_opts_dict["backend"]:
_write_item(item)
cisco_str = (" )),\n"
" ('CISCO_FABRIC_EXAMPLE',\n"
" itertools.chain(\n")
opt_file.write(cisco_str)
for item in registered_opts_dict["CISCO_FABRIC_EXAMPLE"]:
_write_item(item)
brcd_str = (" )),\n"
" ('BRCD_FABRIC_EXAMPLE',\n"
" itertools.chain(\n")
opt_file.write(brcd_str)
for item in registered_opts_dict["BRCD_FABRIC_EXAMPLE"]:
_write_item(item)
keymgr_str = (" )),\n"
" ('keymgr',\n"
" itertools.chain(\n")
opt_file.write(keymgr_str)
for item in registered_opts_dict["keymgr"]:
_write_item(item)
fczm_str = (" )),\n"
" ('fc-zone-manager',\n"
" itertools.chain(\n")
opt_file.write(fczm_str)
for item in registered_opts_dict["fc-zone-manager"]:
_write_item(item)
closing_str = (" )),\n"
" ]\n")
opt_file.write(closing_str)
opt_file.close()
closing_str = (" ]\n")
opt_file.write(closing_str)
opt_file.close()

View File

@ -169,6 +169,18 @@ from cinder.zonemanager import fc_zone_manager as \
def list_opts():
return [
('FC-ZONE-MANAGER',
itertools.chain(
cinder_zonemanager_fczonemanager.zone_manager_opts,
cinder_zonemanager_drivers_brocade_brcdfczonedriver.brcd_opts,
cinder_zonemanager_drivers_cisco_ciscofczonedriver.cisco_opts,
)),
('KEYMGR',
itertools.chain(
cinder_keymgr_keymgr.encryption_opts,
cinder.keymgr.keymgr_opts,
cinder_keymgr_confkeymgr.key_mgr_opts,
)),
('DEFAULT',
itertools.chain(
cinder_backup_driver.service_opts,
@ -305,15 +317,10 @@ def list_opts():
cinder_volume_drivers_vzstorage.vzstorage_opts,
cinder_volume_drivers_nfs.nfs_opts,
)),
('profiler',
('PROFILER',
itertools.chain(
cinder_service.profiler_opts,
)),
('backend',
itertools.chain(
[cinder_cmd_volume.host_opt],
[cinder_cmd_all.volume_cmd.host_opt],
)),
('CISCO_FABRIC_EXAMPLE',
itertools.chain(
cinder_zonemanager_drivers_cisco_ciscofabricopts.
@ -324,16 +331,9 @@ def list_opts():
cinder_zonemanager_drivers_brocade_brcdfabricopts.
brcd_zone_opts,
)),
('keymgr',
('BACKEND',
itertools.chain(
cinder_keymgr_keymgr.encryption_opts,
cinder.keymgr.keymgr_opts,
cinder_keymgr_confkeymgr.key_mgr_opts,
)),
('fc-zone-manager',
itertools.chain(
cinder_zonemanager_fczonemanager.zone_manager_opts,
cinder_zonemanager_drivers_brocade_brcdfczonedriver.brcd_opts,
cinder_zonemanager_drivers_cisco_ciscofczonedriver.cisco_opts,
[cinder_cmd_volume.host_opt],
[cinder_cmd_all.volume_cmd.host_opt],
)),
]

View File

@ -76,20 +76,23 @@ fi
if [ $NOSAMPLE -eq 0 ] ; then
oslo-config-generator --config-file=cinder/config/cinder-config-generator.conf
if [ $? -ne 0 ] ; then
echo -en "\n\n#################################################"
echo -en "\nERROR: Non-zero exit from oslo-config-generator."
echo -en "\n See output above for details.\n"
echo -en "#################################################\n"
mv $TARGETDIR/opts.py.bak $TARGETDIR/opts.py
exit 1
fi
diff $TARGETDIR/opts.py $TARGETDIR/opts.py.bak &> /dev/null
if [ $? -ne 0 ] ; then
mv $TARGETDIR/opts.py.bak $TARGETDIR/opts.py
else
rm -f $TARGETDIR/opts.py.bak
fi
if [ $? -ne 0 ] ; then
echo -en "\n\n#################################################"
echo -en "\nERROR: Non-zero exit from oslo-config-generator."
echo -en "\n See output above for details.\n"
echo -en "#################################################\n"
exit 1
fi
if [ ! -s ./etc/cinder/cinder.conf.sample ] ; then
echo -en "\n\n#########################################################"
echo -en "\nERROR: etc/cinder/cinder.sample.conf not created properly."