)]}'
{"os_vif/__init__.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"56c603acb7a7c9de128bb29d76c44a3d8b35cd8f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        os_vif.objects.register_all()"},{"line_number":45,"context_line":"        if not config:"},{"line_number":46,"context_line":"            # If no specifc config provided use default one."},{"line_number":47,"context_line":"            config \u003d os_vif.objects.vif.PluginConfig()"},{"line_number":48,"context_line":"        _EXT_MANAGER \u003d extension.ExtensionManager(namespace\u003d\u0027os_vif\u0027,"},{"line_number":49,"context_line":"                                                  invoke_on_load\u003dTrue,"},{"line_number":50,"context_line":"                                                  invoke_args\u003dconfig)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_96666328","line":47,"range":{"start_line":47,"start_character":52,"end_line":47,"end_character":54},"updated":"2016-02-01 15:52:10.000000000","message":"The config parameters we\u0027re passing here are used exclusively by the plugin implementation\u0027s plug/unplug methods. Since the plugin is supposed to be completely independent of Nova, it feels pretty unpleasant to me that we have to pass through these config parameters from Nova (or any other service using os-vif). \n\nFor a start, the \u0027config\u0027 object is only even relevant from the Nova side. When Neutron is using os-vif, it won\u0027t want to pass a config at all since it never invokes the plug/unplug methods. The other problem is that any time a plugin implementation needs to add a new config parameter, they are going to have to modify at least Nova to pass the new parameter into the os_vif.initialize() call, and now we\u0027ll have to modify os_vif PluginConfig object too. This is a pretty unpleasant situation, since the goal os os-vif was to avoid the need to modify Nova when writing plugins\n\nThus I am thinking that each plugin should be 100% responsible for its own configuration parameters.\n\nThe plugin should talk to oslo.config directly, ideally using an /etc/os-vif/[plugin_name].conf config file, or failing that a [plugin_name] group in the nova.conf file.  The plugin would absolutely *not* be allowed to access the other sections in nova.conf though - plugin config must be strictly separated, which is what makes me prefer a separate config file entirely.\n\nAny way this will avoid any need for changes to Nova when adding new config params for plugins. It also nicely avoids the issue with Neutron initializing os-vif, since the plugin is totally self-contained now.\n\n\nIOW, I think you could just switch your commit here to simply remove the \u0027**config\u0027 parameter entirely and not add any PluginConfig object. Then I can update my linxubridge/ovs patches to use oslo.config","commit_id":"56e57e8d1bb824f193b45076daa49238a555cd79"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"bdf0cdf2623dd0129b0986b98d1f7d968dee2f6e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        os_vif.objects.register_all()"},{"line_number":45,"context_line":"        if not config:"},{"line_number":46,"context_line":"            # If no specifc config provided use default one."},{"line_number":47,"context_line":"            config \u003d os_vif.objects.vif.PluginConfig()"},{"line_number":48,"context_line":"        _EXT_MANAGER \u003d extension.ExtensionManager(namespace\u003d\u0027os_vif\u0027,"},{"line_number":49,"context_line":"                                                  invoke_on_load\u003dTrue,"},{"line_number":50,"context_line":"                                                  invoke_args\u003dconfig)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_548c2335","line":47,"range":{"start_line":47,"start_character":52,"end_line":47,"end_character":54},"in_reply_to":"7a5de9d1_96666328","updated":"2016-02-02 16:15:56.000000000","message":"I put up a review that does this alternative approach to config\n\nhttps://review.openstack.org/275281","commit_id":"56e57e8d1bb824f193b45076daa49238a555cd79"}],"os_vif/objects/vif.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"db2a2001029623b438497ddb5cfec4c1ba2a6207","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                for floating_ip in fixed_ip[\u0027floating_ips\u0027]]"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"class Config(base.VersionedObject):"},{"line_number":151,"context_line":"    \"\"\"Configuration passed to initialize plugin\"\"\""},{"line_number":152,"context_line":"    # Version 1.0: Initial version"},{"line_number":153,"context_line":"    VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_e2e663b3","line":150,"range":{"start_line":150,"start_character":6,"end_line":150,"end_character":12},"updated":"2016-01-20 10:15:47.000000000","message":"Lets call this PluginConfig just to be a bit more explicit about its use","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"db2a2001029623b438497ddb5cfec4c1ba2a6207","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        # Default: False. For plugins that configure IPv6 iptables"},{"line_number":157,"context_line":"        # rules or functionality, set this option to True if you want"},{"line_number":158,"context_line":"        # to support IPv6."},{"line_number":159,"context_line":"        \u0027use_ipv6\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Default: False. Set to True to force plugins to use sudoers"},{"line_number":162,"context_line":"        # files instead of any \u0027oslo.rootwrap\u0027 functionality."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_425baf54","line":159,"range":{"start_line":159,"start_character":17,"end_line":159,"end_character":19},"updated":"2016-01-20 10:15:47.000000000","message":"Since this is specifically about iptables, shall we call this \u0027use_ipv6_firewall\u0027","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"deb9251c4412c6b93501eb8df26a8e92af1beb8e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        # Default: False. For plugins that configure IPv6 iptables"},{"line_number":157,"context_line":"        # rules or functionality, set this option to True if you want"},{"line_number":158,"context_line":"        # to support IPv6."},{"line_number":159,"context_line":"        \u0027use_ipv6\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Default: False. Set to True to force plugins to use sudoers"},{"line_number":162,"context_line":"        # files instead of any \u0027oslo.rootwrap\u0027 functionality."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_32457fb2","line":159,"range":{"start_line":159,"start_character":17,"end_line":159,"end_character":19},"in_reply_to":"ba63e191_425baf54","updated":"2016-01-22 18:38:30.000000000","message":"i wonder if this should be in the main os-vif conf as this seams plugin specific. for example this has no meaning for sriov or vhost-user.","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"db2a2001029623b438497ddb5cfec4c1ba2a6207","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Default: False. Set to True to force plugins to use sudoers"},{"line_number":162,"context_line":"        # files instead of any \u0027oslo.rootwrap\u0027 functionality."},{"line_number":163,"context_line":"        \u0027disable_rootwrap\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        # Default: False. Set to True to use the optional"},{"line_number":166,"context_line":"        # \u0027oslo.rootwrap\u0027 daemon for better performance of root-run"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_022cd7a9","line":163,"range":{"start_line":163,"start_character":28,"end_line":163,"end_character":34},"updated":"2016-01-20 10:15:47.000000000","message":"I\u0027d prefer to invert this and say \u0027use_rootwrap\u0027 and default it to True, so we\u0027re consistent with the next property name.","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b0cd40a3d009b4d6f8872b2bd7aeb8ac9bc1347","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Default: /etc/nova/rootwrap.conf. Path to the"},{"line_number":171,"context_line":"        # rootwrap configuration file."},{"line_number":172,"context_line":"        \u0027rootwrap_config\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Default: \u0027\u0027. Override top filters in iptables rules"},{"line_number":175,"context_line":"        # construction."}],"source_content_type":"text/x-python","patch_set":2,"id":"da6ed579_3180f9bf","line":172,"range":{"start_line":172,"start_character":27,"end_line":172,"end_character":62},"updated":"2016-01-14 19:19:42.000000000","message":"this should be fields.StringField(default\u003d\u0027/etc/nova/rootwrap.conf\u0027)","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"deb9251c4412c6b93501eb8df26a8e92af1beb8e","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # rootwrap configuration file."},{"line_number":172,"context_line":"        \u0027rootwrap_config\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Default: \u0027\u0027. Override top filters in iptables rules"},{"line_number":175,"context_line":"        # construction."},{"line_number":176,"context_line":"        \u0027iptables_top_regex\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Default: \u0027\u0027. Override bottom filters in iptables rules"},{"line_number":179,"context_line":"        # construction."},{"line_number":180,"context_line":"        \u0027iptables_bottom_regex\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # Default: DROP. Override the name of the drop action in"},{"line_number":183,"context_line":"        # iptables rules."},{"line_number":184,"context_line":"        \u0027iptables_drop_action\u0027: fields.StringField(default\u003d\u0027DROP\u0027),"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        # Default: [\u0027all\u0027]."},{"line_number":187,"context_line":"        \u0027forward_bridge_interface\u0027: fields.DictOfStringsField(default\u003d[\u0027all\u0027]),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_12763b06","line":184,"range":{"start_line":174,"start_character":8,"end_line":184,"end_character":67},"updated":"2016-01-22 18:38:30.000000000","message":"im not sure if this should be here or in anohter config object provided by the plugin that uses this.\n\nis this common to several plugins?","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9b0cd40a3d009b4d6f8872b2bd7aeb8ac9bc1347","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        # iptables rules."},{"line_number":184,"context_line":"        \u0027iptables_drop_action\u0027: fields.StringField(default\u003d\u0027DROP\u0027),"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        # Default: [\u0027all\u0027]."},{"line_number":187,"context_line":"        \u0027forward_bridge_interface\u0027: fields.DictOfStringsField(default\u003d[\u0027all\u0027]),"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # Default: 1500. Override the MTU of network devices created"},{"line_number":190,"context_line":"        # by a VIF plugin."}],"source_content_type":"text/x-python","patch_set":2,"id":"da6ed579_51fa4d44","line":187,"range":{"start_line":186,"start_character":8,"end_line":187,"end_character":78},"updated":"2016-01-14 19:19:42.000000000","message":"what is this item used for? can you add a comment?","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"db2a2001029623b438497ddb5cfec4c1ba2a6207","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # Default: 1500. Override the MTU of network devices created"},{"line_number":190,"context_line":"        # by a VIF plugin."},{"line_number":191,"context_line":"        \u0027network_device_mtu\u0027: fields.StringField(default\u003d1500),"},{"line_number":192,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_a2bdcb69","line":191,"range":{"start_line":191,"start_character":61,"end_line":191,"end_character":63},"updated":"2016-01-20 10:15:47.000000000","message":"I think you want an IntegerField here","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"56c603acb7a7c9de128bb29d76c44a3d8b35cd8f","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Default: /etc/nova/rootwrap.conf. Path to the"},{"line_number":208,"context_line":"        # rootwrap configuration file."},{"line_number":209,"context_line":"        \u0027rootwrap_config\u0027: fields.StringField("},{"line_number":210,"context_line":"            default\u003d\u0027/etc/nova/rootwrap.conf\u0027),"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # Default: \u0027\u0027. Override top filters in iptables rules"},{"line_number":213,"context_line":"        # construction."}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_96bd03da","line":210,"updated":"2016-02-01 15:52:10.000000000","message":"FWIW, we have to kill all use of rootwrap in plugins. os-vif is mandated to use privsep instead.","commit_id":"56e57e8d1bb824f193b45076daa49238a555cd79"}],"os_vif/tests/test_os_vif.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"db2a2001029623b438497ddb5cfec4c1ba2a6207","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        os_vif.initialize()"},{"line_number":31,"context_line":"        os_vif.initialize()"},{"line_number":32,"context_line":"        mock_EM.assert_called_once_with("},{"line_number":33,"context_line":"            invoke_args\u003dmock.ANY, invoke_on_load\u003dTrue, namespace\u003d\u0027os_vif\u0027)"},{"line_number":34,"context_line":"        self.assertNotEqual(None, os_vif._EXT_MANAGER)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_plug_not_initialized(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_dd1ea062","line":33,"range":{"start_line":33,"start_character":12,"end_line":33,"end_character":23},"updated":"2016-01-20 10:15:47.000000000","message":"In nova/test.py I added a simple class \u0027MatchType\u0027 - if you copy that into os_vif/tests/util.py, then you can do  MatchType(os_vif.objects.Config) here, which is a stronger assertion than mock.ANY\n\nShould probably also add a test case where we pass in a pre-created Config object","commit_id":"a1c27c2b78fd448544d3be12225e89ef11cd2b5e"}]}
