)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"380d0dd1f0009ceb4e6f05c3321b66d9bc698dbd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"next options:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\u0027auth_strategy\u0027, \u0027glance_protocol\u0027:"},{"line_number":19,"context_line":" * ironic/api/app.py"},{"line_number":20,"context_line":" * ironic/common/image_service.py"},{"line_number":21,"context_line":" * ironic/dhcp/neutron.py"},{"line_number":22,"context_line":"\u0027protocol\u0027:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_cc6a55ee","line":19,"updated":"2015-11-18 16:31:02.000000000","message":"I was actually hoping to see something like this for each of the affected configs: \n\n\u0027auth_strategy: previously, if it wasn\u0027t \u0027keystone\u0027 it was treated as if it was \u0027noauth\u0027 so eg \u0027foo\u0027 would work. Now it is enforced to be either \u0027keystone\u0027 or \u0027noauth\u0027.\n\nBut maybe I\u0027m the only one that would like that level of detail. And/or maybe that belongs in reno.","commit_id":"4c1df4141a46377278fc2cde81e6ad514bdcf119"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"5d09f9a005dc854797ca5991dc4ed4ef6740674f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"next options:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\u0027auth_strategy\u0027, \u0027glance_protocol\u0027:"},{"line_number":19,"context_line":" * ironic/api/app.py"},{"line_number":20,"context_line":" * ironic/common/image_service.py"},{"line_number":21,"context_line":" * ironic/dhcp/neutron.py"},{"line_number":22,"context_line":"\u0027protocol\u0027:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_7c95143d","line":19,"in_reply_to":"ba8a016a_5905c243","updated":"2015-11-18 17:13:56.000000000","message":"I\u0027s not good idea to fall back to default, operator can miss warning about this and don\u0027t know that default value is used, it\u0027s seems over complecated.","commit_id":"4c1df4141a46377278fc2cde81e6ad514bdcf119"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"62f607f6a3427e46e90894e309e6eb17ac35b606","unresolved":false,"context_lines":[{"line_number":16,"context_line":"next options:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\u0027auth_strategy\u0027, \u0027glance_protocol\u0027:"},{"line_number":19,"context_line":" * ironic/api/app.py"},{"line_number":20,"context_line":" * ironic/common/image_service.py"},{"line_number":21,"context_line":" * ironic/dhcp/neutron.py"},{"line_number":22,"context_line":"\u0027protocol\u0027:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_5905c243","line":19,"in_reply_to":"ba8a016a_cc6a55ee","updated":"2015-11-18 17:02:38.000000000","message":"Do we even have documentation at the config option level in our docs? Can we have choices, but fall back to a default if the choice is not valid and not throw an exception?","commit_id":"4c1df4141a46377278fc2cde81e6ad514bdcf119"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"380d0dd1f0009ceb4e6f05c3321b66d9bc698dbd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u0027auth_strategy\u0027, \u0027glance_protocol\u0027:"},{"line_number":19,"context_line":" * ironic/api/app.py"},{"line_number":20,"context_line":" * ironic/common/image_service.py"},{"line_number":21,"context_line":" * ironic/dhcp/neutron.py"},{"line_number":22,"context_line":"\u0027protocol\u0027:"},{"line_number":23,"context_line":" * ironic/drivers/modules/amt/common.py"},{"line_number":24,"context_line":"\u0027auth_method\u0027, \u0027sensor_method\u0027:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_2c70c10a","line":21,"updated":"2015-11-18 16:31:02.000000000","message":"For neutron\u0027s \u0027auth_strategy\u0027, it used to raise ConfigInvalid exception; now it\u0027ll raise ConfigFileValueError. Should we document that?","commit_id":"4c1df4141a46377278fc2cde81e6ad514bdcf119"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"62f607f6a3427e46e90894e309e6eb17ac35b606","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u0027auth_strategy\u0027, \u0027glance_protocol\u0027:"},{"line_number":19,"context_line":" * ironic/api/app.py"},{"line_number":20,"context_line":" * ironic/common/image_service.py"},{"line_number":21,"context_line":" * ironic/dhcp/neutron.py"},{"line_number":22,"context_line":"\u0027protocol\u0027:"},{"line_number":23,"context_line":" * ironic/drivers/modules/amt/common.py"},{"line_number":24,"context_line":"\u0027auth_method\u0027, \u0027sensor_method\u0027:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_590f0237","line":21,"in_reply_to":"ba8a016a_2c70c10a","updated":"2015-11-18 17:02:38.000000000","message":"Seems like overkill. This is an exception which would prevent Ironic from starting up, right? \n\nSeems unlikely that someone is wrapping that startup and only catching ConfigInvalid.\n\nI\u0027m all for documentation, but do we comprehensively document all the exceptions which could prevent starting up Ironic somewhere?","commit_id":"4c1df4141a46377278fc2cde81e6ad514bdcf119"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8c102003026f9c55df628f2bc35fec64518e9c40","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u0027auth_strategy\u0027, \u0027glance_protocol\u0027:"},{"line_number":19,"context_line":" * ironic/api/app.py"},{"line_number":20,"context_line":" * ironic/common/image_service.py"},{"line_number":21,"context_line":" * ironic/dhcp/neutron.py"},{"line_number":22,"context_line":"\u0027protocol\u0027:"},{"line_number":23,"context_line":" * ironic/drivers/modules/amt/common.py"},{"line_number":24,"context_line":"\u0027auth_method\u0027, \u0027sensor_method\u0027:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_9c423867","line":21,"in_reply_to":"ba8a016a_590f0237","updated":"2015-11-18 17:16:12.000000000","message":"Well, this is a commit message about the changes. Even if we don\u0027t document for the user, I think it is useful for the commit to describe the changes/effects.\n\nRegardless - I am not too concerned about exceptions that prevent startup. It either starts up or it doesn\u0027t. BUT I do not know (unless I look through all the code changes) whether all the changes ONLY affect start up. I believe that the check is only done when the config is actually used -- so it is possible that things might barf after ironic is up and running.","commit_id":"4c1df4141a46377278fc2cde81e6ad514bdcf119"}],"ironic/common/dhcp_factory.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"77a4f1c7e593d583b33ce61af3fe077fcabdcc11","unresolved":false,"context_lines":[{"line_number":22,"context_line":"dhcp_provider_opts \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(\u0027dhcp_provider\u0027,"},{"line_number":24,"context_line":"               default\u003d\u0027neutron\u0027,"},{"line_number":25,"context_line":"               choices\u003d[\u0027neutron\u0027, \u0027none\u0027],"},{"line_number":26,"context_line":"               help\u003d_(\u0027DHCP provider to use. \"neutron\" uses Neutron, and \u0027"},{"line_number":27,"context_line":"                      \u0027\"none\" uses a no-op provider.\u0027)),"},{"line_number":28,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_863c84c0","line":25,"updated":"2015-09-22 08:58:56.000000000","message":"DHCP provider is pluggable in Ironic. Hardcoded choices here blocks third-party plugins.","commit_id":"cd33d2752de8db21bd567f09dfa673d17c6335c4"}],"ironic/drivers/modules/amt/common.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"77a4f1c7e593d583b33ce61af3fe077fcabdcc11","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    protocol \u003d info.get(param, CONF.amt.get(param[4:]))"},{"line_number":168,"context_line":"    if protocol not in AMT_PROTOCOL_PORT_MAP:"},{"line_number":169,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":170,"context_line":"            _(\"Invalid protocol %s.\") % protocol)"},{"line_number":171,"context_line":"    if not isinstance(value, six.binary_type):"},{"line_number":172,"context_line":"        protocol \u003d protocol.encode()"},{"line_number":173,"context_line":"    d_info[param[4:]] \u003d protocol"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_fb49598f","side":"PARENT","line":170,"updated":"2015-09-22 08:58:56.000000000","message":"Please do not remove this code, it validates parameter from node.driver_info also.","commit_id":"190e70fd3735878c0373aff5681c772f4e68cb16"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"82390d106df18b9eed31bc9070c2837e02bcfd52","unresolved":false,"context_lines":[{"line_number":48,"context_line":"opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027protocol\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027http\u0027,"},{"line_number":51,"context_line":"               choices\u003d[\u0027http\u0027, \u0027https\u0027],"},{"line_number":52,"context_line":"               help\u003d_(\u0027Protocol used for AMT endpoint, \u0027"},{"line_number":53,"context_line":"                      \u0027support http/https\u0027)),"},{"line_number":54,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_bc9bf7c8","line":51,"updated":"2015-10-06 14:38:54.000000000","message":"Sorry, I\u0027m still concerned with the behavior. This will raise ConfigFileValueError (not an ironic exception), whereas the original behaviour was to raise the ironic exception InvalidParameterValue.\n\nMaybe we should change the code to reraise InvalidParameterValue instead.","commit_id":"171142b62245f4626058150bdc54f0d10d753ebf"}],"ironic/drivers/modules/irmc/common.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"82390d106df18b9eed31bc9070c2837e02bcfd52","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                      \u0027443\u0027)),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027auth_method\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027basic\u0027,"},{"line_number":35,"context_line":"               choices\u003d[\u0027basic\u0027, \u0027digest\u0027],"},{"line_number":36,"context_line":"               help\u003d_(\u0027Authentication method to be used for iRMC operations, \u0027"},{"line_number":37,"context_line":"                      \u0027either \"basic\" or \"digest\"\u0027)),"},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027client_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_5cad03e8","line":35,"updated":"2015-10-06 14:38:54.000000000","message":"Sorry, I\u0027m still concerned with the behavior. This will raise ConfigFileValueError (not an ironic exception), whereas the original behaviour was to raise the ironic exception InvalidParameterValue.\n\nMaybe we should change the code to reraise InvalidParameterValue instead.","commit_id":"171142b62245f4626058150bdc54f0d10d753ebf"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"82390d106df18b9eed31bc9070c2837e02bcfd52","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               help\u003d_(\u0027Timeout (in seconds) for iRMC operations\u0027)),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027sensor_method\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027ipmitool\u0027,"},{"line_number":43,"context_line":"               choices\u003d[\u0027ipmitool\u0027, \u0027scci\u0027],"},{"line_number":44,"context_line":"               help\u003d_(\u0027Sensor data retrieval method, either \u0027"},{"line_number":45,"context_line":"                      \u0027\"ipmitool\" or \"scci\"\u0027)),"},{"line_number":46,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_fcb96f2f","line":43,"updated":"2015-10-06 14:38:54.000000000","message":"Sorry, I\u0027m still concerned with the behavior. This will raise ConfigFileValueError (not an ironic exception), whereas the original behaviour was to raise the ironic exception InvalidParameterValue.\n\nMaybe we should change the code to reraise InvalidParameterValue instead.","commit_id":"171142b62245f4626058150bdc54f0d10d753ebf"}],"ironic/drivers/modules/irmc/deploy.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2f052f4b456a8ad19a6cd16f297ae198486cd76a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"               help\u003d\u0027IP of remote image server\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027remote_image_share_type\u0027,"},{"line_number":63,"context_line":"               default\u003d\u0027CIFS\u0027,"},{"line_number":64,"context_line":"               choices\u003d[\u0027CIFS\u0027, \u0027cifs\u0027, \u0027NFS\u0027, \u0027nfs\u0027],"},{"line_number":65,"context_line":"               help\u003d\u0027Share type of virtual media, either \"NFS\" or \"CIFS\"\u0027),"},{"line_number":66,"context_line":"    cfg.StrOpt(\u0027remote_image_share_name\u0027,"},{"line_number":67,"context_line":"               default\u003d\u0027share\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_af3185a4","line":64,"updated":"2015-10-06 10:08:43.000000000","message":"This seems to be inconsistent with other choices, I think it would be fine to just allow \u0027cifs\u0027 and \u0027nfs\u0027 (current code supports even \u0027CiFs\u0027 :))","commit_id":"9adb75eed820e3b87643caf52ea1a08c7d436e81"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"be02b3ebd998f7a40271089f3ea69bd69e6c9e19","unresolved":false,"context_lines":[{"line_number":61,"context_line":"               help\u003d\u0027IP of remote image server\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027remote_image_share_type\u0027,"},{"line_number":63,"context_line":"               default\u003d\u0027CIFS\u0027,"},{"line_number":64,"context_line":"               choices\u003d[\u0027CIFS\u0027, \u0027cifs\u0027, \u0027NFS\u0027, \u0027nfs\u0027],"},{"line_number":65,"context_line":"               help\u003d\u0027Share type of virtual media, either \"NFS\" or \"CIFS\"\u0027),"},{"line_number":66,"context_line":"    cfg.StrOpt(\u0027remote_image_share_name\u0027,"},{"line_number":67,"context_line":"               default\u003d\u0027share\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_84634bb1","line":64,"in_reply_to":"7a2fa921_6112a1b6","updated":"2015-10-06 10:42:34.000000000","message":"Agree with Lucas, it breaks  backward compatibility, also not sure why we allow here case insensitive options, imho it\u0027s example of bad usability for operators. I\u0027ll revert change and add comment.","commit_id":"9adb75eed820e3b87643caf52ea1a08c7d436e81"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7dd4f748a3c5983f0976bc74330c3fec376bfd01","unresolved":false,"context_lines":[{"line_number":61,"context_line":"               help\u003d\u0027IP of remote image server\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027remote_image_share_type\u0027,"},{"line_number":63,"context_line":"               default\u003d\u0027CIFS\u0027,"},{"line_number":64,"context_line":"               choices\u003d[\u0027CIFS\u0027, \u0027cifs\u0027, \u0027NFS\u0027, \u0027nfs\u0027],"},{"line_number":65,"context_line":"               help\u003d\u0027Share type of virtual media, either \"NFS\" or \"CIFS\"\u0027),"},{"line_number":66,"context_line":"    cfg.StrOpt(\u0027remote_image_share_name\u0027,"},{"line_number":67,"context_line":"               default\u003d\u0027share\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_6112a1b6","line":64,"in_reply_to":"7a2fa921_af3185a4","updated":"2015-10-06 10:29:15.000000000","message":"If we only allow \"cifs\" and \"nfs\" it\u0027s not going to be backward compatible, someone with an old configuration file will break because of this change.\n\nI think we are better off not having \"choices\" for this configuration option at present. We can add a FIXME in the code if needed for future change.\n\nThat said, I\u0027ve put a patch up for oslo.config to allow case insensitiveness for choices values: https://review.openstack.org/#/c/231399/ , I think that will make situations like this one when converting existing StrOpt configurations to use choices.","commit_id":"9adb75eed820e3b87643caf52ea1a08c7d436e81"}],"releasenotes/notes/config-choices-support-6c6b0d1f599b93d6.yaml":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"ff5ef137241cd616091233e490b5f75bae978439","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - Using ``choices`` parameter in config options changes Ironic behavior,"},{"line_number":4,"context_line":"    exception ConfigFileValueError would be raised if provided value isn\u0027t"},{"line_number":5,"context_line":"    included to choices list. It affects following options(with new values"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba8a016a_6fdd586e","line":2,"updated":"2015-11-18 17:21:33.000000000","message":"This should be \"upgrade\" IMO","commit_id":"03cba0b550ef975dd6f7412e310a7089adf2caec"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"ff5ef137241cd616091233e490b5f75bae978439","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - Using ``choices`` parameter in config options changes Ironic behavior,"},{"line_number":4,"context_line":"    exception ConfigFileValueError would be raised if provided value isn\u0027t"},{"line_number":5,"context_line":"    included to choices list. It affects following options(with new values"},{"line_number":6,"context_line":"    options enforced to):"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    api/app.py:\u0027auth_strategy\u0027:                   [\u0027noauth\u0027, \u0027keystone\u0027],"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba8a016a_0fbdac01","line":5,"updated":"2015-11-18 17:21:33.000000000","message":"Nit: add space before (","commit_id":"03cba0b550ef975dd6f7412e310a7089adf2caec"}]}
