)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint metadata-overlapping-networks"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Adds Metadata for guest VMs running on Qunatum networks.  This requires"},{"line_number":12,"context_line":"a companion patchset for Nova to test."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I524c6fdcd6a44e46da08395fd84c1288052a69ea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAMH%2F%2F4Sc%3D","line":11,"updated":"2012-11-18 09:47:55.000000000","message":"typo - Qunatum","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"}],"etc/l3_agent.ini":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# If use_namespaces is set as False then the agent can only configure one router."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Where to store dnsmasq state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAMH%2F%2F5%2Bw%3D","line":31,"updated":"2012-11-16 06:13:23.000000000","message":"dnsmasq -\u003e metadata?","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# If use_namespaces is set as False then the agent can only configure one router."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Where to store dnsmasq state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAMH%2F%2F014%3D","line":31,"in_reply_to":"AAAAMH%2F%2F5%2Bw%3D","updated":"2012-11-21 04:57:27.000000000","message":"Done","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store dnsmasq state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAMH%2F%2F5pE%3D","line":34,"updated":"2012-11-16 14:29:17.000000000","message":"Do we need this. There is already the state_path defined in common/config.py.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store dnsmasq state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAMH%2F%2F56M%3D","line":34,"updated":"2012-11-16 07:22:54.000000000","message":"Why is it put here? It is used to store dnsmasq state files.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store dnsmasq state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAMH%2F%2F5iU%3D","line":34,"in_reply_to":"AAAAMH%2F%2F56M%3D","updated":"2012-11-19 16:40:31.000000000","message":"state_path is used to keep state.  The metadata agent spawns a process within each tenant and we need a place to record pids, so that we can control the processes.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store dnsmasq state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAMH%2F%2F5iM%3D","line":34,"in_reply_to":"AAAAMH%2F%2F5pE%3D","updated":"2012-11-19 16:40:31.000000000","message":"Yes.  The config file is currently shared by both the l3_agent and metadata agent.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Where to store metadata state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."}],"source_content_type":"text/x-properties","patch_set":10,"id":"AAAAMH%2F%2FtfA%3D","line":33,"updated":"2012-11-29 06:32:33.000000000","message":"I don\u0027t think we need write the devstack here","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store metadata state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":10,"id":"AAAAMH%2F%2FtfE%3D","line":34,"updated":"2012-11-29 06:32:33.000000000","message":"I think we should not write this into ini file. We just need to list the options here with default values.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store metadata state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":10,"id":"AAAAMH%2F%2FsYA%3D","line":34,"in_reply_to":"AAAAMH%2F%2Fs08%3D","updated":"2012-11-30 00:32:26.000000000","message":"The absolute path in configure file is almost the same as one in code.\nAs far as I know,  there are many guys installing devstack not in /opt/stack at all.\nSo we have to deal it with in devstack even if we have set this value here.\n\nI prefer to the rule:\nall of options and their value in configuration files are default values unless there is very special reason: such as username, password and so on. In this way we can have a near zero configuration system.\n\nI don\u0027t know when the dhcp agent helps the devstack in wrong way, but it is not a good  idea.\nWe can see the code in stack.sh:\n    iniset $Q_DHCP_CONF_FILE DEFAULT state_path $DATA_DIR/quantum\n\nSo any value we set here, we have to take care of it in devstack.\nMy opinion is:\n# state_path \u003d .\nsee quantum/common/config.py\n\nwhat is your opinion?","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store metadata state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":10,"id":"AAAAMH%2F%2FsVs%3D","line":34,"in_reply_to":"AAAAMH%2F%2FsWk%3D","updated":"2012-11-30 01:11:52.000000000","message":"Yes, I know it is good to have this feature in as soon as possible.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store metadata state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":10,"id":"AAAAMH%2F%2FsWk%3D","line":34,"in_reply_to":"AAAAMH%2F%2FsYA%3D","updated":"2012-11-30 00:53:07.000000000","message":"It sounds like both of your are ok with updating state_path variables in both l3_agent.ini and dhcp_agent.ini to be the empty string.  I agree with this as well, as it seems odd to have a default ini file be targeted at devstack, when most users will end up consuming quantum via packages.  \n\nIt looks like devstack doesn\u0027t need to be updated for dhcp, since it already explicitly sets the state_path in stack.sh.  Presumably we will update the metadata devstack patch to do the same?  https://review.openstack.org/#/c/16283/\n\nIf that\u0027s the case, I would just quickly rev this patch to remove the state_path here, and yong and I can approve it and get this puppy merged.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Where to store metadata state files.  This directory must be writable by the"},{"line_number":32,"context_line":"# user executing the agent. The value below is compatible with a default"},{"line_number":33,"context_line":"# devstack installation."},{"line_number":34,"context_line":"state_path \u003d /opt/stack/data/quantum"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# This is done by setting the specific router_id."},{"line_number":37,"context_line":"# router_id \u003d"}],"source_content_type":"text/x-properties","patch_set":10,"id":"AAAAMH%2F%2Fs08%3D","line":34,"in_reply_to":"AAAAMH%2F%2FtfE%3D","updated":"2012-11-29 19:27:43.000000000","message":"This is consistent with how the other .ini files define state_path.  How about the we commit this here and file a separate bug that fixes devstack for both and then changes the defaults in the .ini files second.  I think it will be the least disruptive to the community. Does that work for you?","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"}],"etc/quantum/rootwrap.d/l3.filters":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# metadata proxy"},{"line_number":20,"context_line":"metadata_proxy: CommandFilter, /usr/local/bin/quantum-ns-metadata-proxy, root"},{"line_number":21,"context_line":"kill_metadata7: KillFilter, root, /usr/bin/python2.7, -9"},{"line_number":22,"context_line":"kill_metadata6: KillFilter, root, /usr/bin/python2.6, -9"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# ip_lib"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAMH%2F%2F5oY%3D","line":21,"updated":"2012-11-16 14:29:17.000000000","message":"I don\u0027t understand why we have the different python versions.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# metadata proxy"},{"line_number":20,"context_line":"metadata_proxy: CommandFilter, /usr/local/bin/quantum-ns-metadata-proxy, root"},{"line_number":21,"context_line":"kill_metadata7: KillFilter, root, /usr/bin/python2.7, -9"},{"line_number":22,"context_line":"kill_metadata6: KillFilter, root, /usr/bin/python2.6, -9"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# ip_lib"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAMH%2F%2F5h8%3D","line":21,"in_reply_to":"AAAAMH%2F%2F5oY%3D","updated":"2012-11-19 16:40:31.000000000","message":"The kill filter does an exact check of the python command line string.  If the path (obtained via os.readlink) to the binary does not match exactly, it won\u0027t kill the process.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"}],"quantum/agent/l3_agent.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":87,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"},{"line_number":88,"context_line":"                   default\u003d3,"},{"line_number":89,"context_line":"                   help\u003d\"Send this many gratuitous ARPs for HA setup, \""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F5%2BY%3D","line":86,"updated":"2012-11-16 06:13:23.000000000","message":"Initially it seems concerning to change the value of a default, as old setups that used the default before will now get a new value.  I need to think more about this, as really this is almost a different config value with the same name, given that we\u0027re now DNAT-ing to the internal proxy, not the Nova API.  I wonder if having a different flag name would actually be appropriate.  Need to think about this more.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F5%2BU%3D","line":476,"updated":"2012-11-16 06:13:23.000000000","message":"is metadata_ip really used in a meaningful way then?  If not, do we need to look at removing other rules that reference it?","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F00U%3D","line":476,"in_reply_to":"AAAAMH%2F%2F5%2BU%3D","updated":"2012-11-21 04:57:27.000000000","message":"Yes.  I think we do.  I wanted to get feedback from others on this.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"                   default\u003d3,"},{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4SA%3D","line":83,"updated":"2012-11-18 09:47:55.000000000","message":"Please update the l3_agent.ini file.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"                   default\u003d3,"},{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F3fs%3D","line":83,"in_reply_to":"AAAAMH%2F%2F4SA%3D","updated":"2012-11-19 16:40:31.000000000","message":"Done","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":87,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4SE%3D","line":84,"updated":"2012-11-18 09:47:55.000000000","message":"Please update the l3_agent.ini file.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":87,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F3fk%3D","line":84,"in_reply_to":"AAAAMH%2F%2F4SE%3D","updated":"2012-11-19 16:40:31.000000000","message":"Done","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _router_removed(self, router_id):"},{"line_number":250,"context_line":"        ri \u003d self.router_info[router_id]"},{"line_number":251,"context_line":"        self._destroy_metadata_agent(ri)"},{"line_number":252,"context_line":"        for c, r in self.metadata_filter_rules():"},{"line_number":253,"context_line":"            ri.iptables_manager.ipv4[\u0027filter\u0027].remove_rule(c, r)"},{"line_number":254,"context_line":"        for c, r in self.metadata_nat_rules():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4SY%3D","line":251,"updated":"2012-11-18 09:47:55.000000000","message":"If there is a problem in one of the lines below - say for example the ip tables apply fails, do we want to kill the agent prior to deleting the router?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _router_removed(self, router_id):"},{"line_number":250,"context_line":"        ri \u003d self.router_info[router_id]"},{"line_number":251,"context_line":"        self._destroy_metadata_agent(ri)"},{"line_number":252,"context_line":"        for c, r in self.metadata_filter_rules():"},{"line_number":253,"context_line":"            ri.iptables_manager.ipv4[\u0027filter\u0027].remove_rule(c, r)"},{"line_number":254,"context_line":"        for c, r in self.metadata_nat_rules():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F3fw%3D","line":251,"in_reply_to":"AAAAMH%2F%2F4SY%3D","updated":"2012-11-19 16:40:31.000000000","message":"I\u0027ll move it after the rules are applied.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4SU%3D","line":476,"updated":"2012-11-18 09:47:55.000000000","message":"I think that Yong has a point. If the user updates the ip address of metadata_ip then we will need to include it i the rules above (unless I have misunderstood - which is certainly known to happen)","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F54I%3D","line":476,"updated":"2012-11-16 07:22:54.000000000","message":"So we don\u0027t need metadata_ip option at all?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F3f8%3D","line":476,"in_reply_to":"AAAAMH%2F%2F4Q8%3D","updated":"2012-11-19 16:40:31.000000000","message":"REDIRECT rewrites the dest address to that of the local interface where the packet arrives.  The namespace proxy always runs within the router namespace.  The metadata_ip is no longer needed and missed removing it.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4Q8%3D","line":476,"in_reply_to":"AAAAMH%2F%2F4SU%3D","updated":"2012-11-18 13:46:21.000000000","message":"I think that the REDIRECT is to a local address. Not 100% sure. We need to make sure that we take care of the case when the metadata proxy/server may be on a different host","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4xo%3D","line":476,"in_reply_to":"AAAAMH%2F%2F54I%3D","updated":"2012-11-16 23:46:20.000000000","message":"I think it\u0027s just because the DNAT rules has localhost as destination (this was actually a folsom bug probably too)","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":80,"context_line":"                   default\u003d3,"},{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0OM%3D","line":82,"updated":"2012-11-21 17:18:18.000000000","message":"can you please update this as a comment in l3_agent.ini","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":80,"context_line":"                   default\u003d3,"},{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwN8%3D","line":82,"in_reply_to":"AAAAMH%2F%2F0OM%3D","updated":"2012-11-27 04:23:56.000000000","message":"I\u0027ve remove this configuration option.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cfg.IntOpt(\u0027polling_interval\u0027,"},{"line_number":80,"context_line":"                   default\u003d3,"},{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyHc%3D","line":82,"in_reply_to":"AAAAMH%2F%2F0OM%3D","updated":"2012-11-25 02:03:28.000000000","message":"Who is Quantum metadata server? metadata-proxy or metadata-agent?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":87,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"},{"line_number":88,"context_line":"                   default\u003d3,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0OI%3D","line":85,"updated":"2012-11-21 17:18:18.000000000","message":"can you please update this as a comment in l3_agent.ini","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cfg.StrOpt(\u0027metadata_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":83,"context_line":"                   help\u003d\"IP address used by Quantum metadata server.\"),"},{"line_number":84,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":85,"context_line":"                   default\u003d9697,"},{"line_number":86,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":87,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"},{"line_number":88,"context_line":"                   default\u003d3,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwN4%3D","line":85,"in_reply_to":"AAAAMH%2F%2F0OI%3D","updated":"2012-11-27 04:23:56.000000000","message":"Done","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _router_removed(self, router_id):"},{"line_number":250,"context_line":"        ri \u003d self.router_info[router_id]"},{"line_number":251,"context_line":"        self._destroy_metadata_agent(ri)"},{"line_number":252,"context_line":"        for c, r in self.metadata_filter_rules():"},{"line_number":253,"context_line":"            ri.iptables_manager.ipv4[\u0027filter\u0027].remove_rule(c, r)"},{"line_number":254,"context_line":"        for c, r in self.metadata_nat_rules():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0M8%3D","line":251,"updated":"2012-11-21 17:18:18.000000000","message":"should this be called after the router is deleted? after line 258","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _router_removed(self, router_id):"},{"line_number":250,"context_line":"        ri \u003d self.router_info[router_id]"},{"line_number":251,"context_line":"        self._destroy_metadata_agent(ri)"},{"line_number":252,"context_line":"        for c, r in self.metadata_filter_rules():"},{"line_number":253,"context_line":"            ri.iptables_manager.ipv4[\u0027filter\u0027].remove_rule(c, r)"},{"line_number":254,"context_line":"        for c, r in self.metadata_nat_rules():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwN0%3D","line":251,"in_reply_to":"AAAAMH%2F%2F0M8%3D","updated":"2012-11-27 04:23:56.000000000","message":"I moved it until after the iptables rules have been updated.  It should be removed before the namespace is destroyed since it could be holding namespace resources and that will block the deletion.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _spawn_metadata_agent(self, router_info):"},{"line_number":261,"context_line":"        def callback(pid_file):"},{"line_number":262,"context_line":"            return [\u0027quantum-ns-metadata-proxy\u0027,"},{"line_number":263,"context_line":"                    \u0027--pid_file\u003d%s\u0027 % pid_file,"},{"line_number":264,"context_line":"                    \u0027--router_id\u003d%s\u0027 % router_info.router_id,"},{"line_number":265,"context_line":"                    \u0027--state_path\u003d%s\u0027 % self.conf.state_path]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyHQ%3D","line":262,"updated":"2012-11-25 02:03:28.000000000","message":"The method tell us we are going to start metadata-agent, why we start metadata-proxy here?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _spawn_metadata_agent(self, router_info):"},{"line_number":261,"context_line":"        def callback(pid_file):"},{"line_number":262,"context_line":"            return [\u0027quantum-ns-metadata-proxy\u0027,"},{"line_number":263,"context_line":"                    \u0027--pid_file\u003d%s\u0027 % pid_file,"},{"line_number":264,"context_line":"                    \u0027--router_id\u003d%s\u0027 % router_info.router_id,"},{"line_number":265,"context_line":"                    \u0027--state_path\u003d%s\u0027 % self.conf.state_path]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fw4w%3D","line":262,"in_reply_to":"AAAAMH%2F%2FyHQ%3D","updated":"2012-11-27 04:23:56.000000000","message":"The namespace metadata proxy needs to run within the same namespace as the router.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def metadata_nat_rules(self):"},{"line_number":472,"context_line":"        rules \u003d []"},{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyHY%3D","line":473,"updated":"2012-11-25 02:03:28.000000000","message":"metadata_ip is defaulted to 127.0.0.1. Can we set metadata_ip to None?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def metadata_nat_rules(self):"},{"line_number":472,"context_line":"        rules \u003d []"},{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwNw%3D","line":473,"in_reply_to":"AAAAMH%2F%2FyHY%3D","updated":"2012-11-27 04:23:56.000000000","message":"I\u0027ve removed metadata_ip","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyHU%3D","line":476,"updated":"2012-11-25 02:03:28.000000000","message":"If we set metadata_ip to another IP, (I mean not local IP), does REDICT work without the metadata_ip?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if self.conf.metadata_ip:"},{"line_number":474,"context_line":"            rules.append((\u0027PREROUTING\u0027, \u0027-s 0.0.0.0/0 -d 169.254.169.254/32 \u0027"},{"line_number":475,"context_line":"                         \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"},{"line_number":476,"context_line":"                         \u0027--to-port %s\u0027 % self.conf.metadata_port))"},{"line_number":477,"context_line":"        return rules"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def external_gateway_nat_rules(self, ex_gw_ip, internal_cidrs,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwNs%3D","line":476,"in_reply_to":"AAAAMH%2F%2FyHU%3D","updated":"2012-11-27 04:23:56.000000000","message":"I\u0027ve removed metadata_ip.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":83,"context_line":"                   default\u003d9697,"},{"line_number":84,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":85,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"},{"line_number":86,"context_line":"                   default\u003d3,"},{"line_number":87,"context_line":"                   help\u003d\"Send this many gratuitous ARPs for HA setup, \""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FwCE%3D","line":84,"updated":"2012-11-27 11:11:18.000000000","message":"metadata server or metadata proxy?","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"                   help\u003d\"The time in seconds between state poll requests.\"),"},{"line_number":82,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"},{"line_number":83,"context_line":"                   default\u003d9697,"},{"line_number":84,"context_line":"                   help\u003d\"TCP Port used by Quantum metadata server.\"),"},{"line_number":85,"context_line":"        cfg.IntOpt(\u0027send_arp_for_ha\u0027,"},{"line_number":86,"context_line":"                   default\u003d3,"},{"line_number":87,"context_line":"                   help\u003d\"Send this many gratuitous ARPs for HA setup, \""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Fv0U%3D","line":84,"in_reply_to":"AAAAMH%2F%2FwCE%3D","updated":"2012-11-27 16:42:29.000000000","message":"Namespace proxy.  I\u0027ve updated the help text.","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        rules \u003d [(\u0027snat\u0027, \u0027-s %s -j SNAT --to-source %s\u0027 %"},{"line_number":523,"context_line":"                 (internal_cidr, ex_gw_ip))]"},{"line_number":524,"context_line":"        rules.append((\u0027POSTROUTING\u0027, \u0027-s %s -d 127.0.0.1/32 -j ACCEPT\u0027 %"},{"line_number":525,"context_line":"                      internal_cidr))"},{"line_number":526,"context_line":"        return rules"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def floating_ip_added(self, ri, ex_gw_port, floating_ip, fixed_ip):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FwB8%3D","line":525,"updated":"2012-11-27 11:11:18.000000000","message":"Is this rule needed since it is to localhost?","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":522,"context_line":"        rules \u003d [(\u0027snat\u0027, \u0027-s %s -j SNAT --to-source %s\u0027 %"},{"line_number":523,"context_line":"                 (internal_cidr, ex_gw_ip))]"},{"line_number":524,"context_line":"        rules.append((\u0027POSTROUTING\u0027, \u0027-s %s -d 127.0.0.1/32 -j ACCEPT\u0027 %"},{"line_number":525,"context_line":"                      internal_cidr))"},{"line_number":526,"context_line":"        return rules"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def floating_ip_added(self, ri, ex_gw_port, floating_ip, fixed_ip):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Fvq4%3D","line":525,"in_reply_to":"AAAAMH%2F%2FwB8%3D","updated":"2012-11-27 16:42:29.000000000","message":"No.  Removed.","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"}],"quantum/agent/linux/daemon.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":6,"context_line":"import time"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"from quantum.agent.linux import utils"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"class Pidfile(object):"},{"line_number":12,"context_line":"    def __init__(self, pidfile, procname, root_helper\u003d\u0027sudo\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F5%2BA%3D","line":9,"updated":"2012-11-16 06:13:23.000000000","message":"long term, I\u0027d like to see code like this in oslo, rather than in quantum, as there\u0027s nothing network specific about it.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":6,"context_line":"import time"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"from quantum.agent.linux import utils"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"class Pidfile(object):"},{"line_number":12,"context_line":"    def __init__(self, pidfile, procname, root_helper\u003d\u0027sudo\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F01s%3D","line":9,"in_reply_to":"AAAAMH%2F%2F5%2BA%3D","updated":"2012-11-21 04:57:27.000000000","message":"Agreed.  I\u0027ll work with them to get it migrated there.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import atexit"},{"line_number":2,"context_line":"import fcntl"},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"from signal import SIGTERM"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F54M%3D","line":1,"updated":"2012-11-16 07:22:54.000000000","message":"license text?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"import atexit"},{"line_number":2,"context_line":"import fcntl"},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"from signal import SIGTERM"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5hc%3D","line":1,"in_reply_to":"AAAAMH%2F%2F54M%3D","updated":"2012-11-19 16:40:31.000000000","message":"Done","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        try:"},{"line_number":32,"context_line":"            self.fd \u003d os.open(pidfile, os.O_CREAT | os.O_RDWR)"},{"line_number":33,"context_line":"        except IOError, e:"},{"line_number":34,"context_line":"            sys.stderr.write(_(\"Failed to open pidfile: %s\") % str(e))"},{"line_number":35,"context_line":"            sys.exit(1)"},{"line_number":36,"context_line":"        self.pidfile \u003d pidfile"},{"line_number":37,"context_line":"        self.procname \u003d procname"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FurA%3D","line":34,"updated":"2012-11-28 12:30:16.000000000","message":"why not use log?","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"        try:"},{"line_number":32,"context_line":"            self.fd \u003d os.open(pidfile, os.O_CREAT | os.O_RDWR)"},{"line_number":33,"context_line":"        except IOError, e:"},{"line_number":34,"context_line":"            sys.stderr.write(_(\"Failed to open pidfile: %s\") % str(e))"},{"line_number":35,"context_line":"            sys.exit(1)"},{"line_number":36,"context_line":"        self.pidfile \u003d pidfile"},{"line_number":37,"context_line":"        self.procname \u003d procname"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FuJU%3D","line":34,"in_reply_to":"AAAAMH%2F%2FurA%3D","updated":"2012-11-28 19:22:11.000000000","message":"Done","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if pid \u003e 0:"},{"line_number":92,"context_line":"                sys.exit(0)"},{"line_number":93,"context_line":"        except OSError, e:"},{"line_number":94,"context_line":"            sys.stderr.write(_(\"fork failed: %d (%s)\\n\") %"},{"line_number":95,"context_line":"                             (e.errno, e.strerror))"},{"line_number":96,"context_line":"            sys.exit(1)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2Fu9s%3D","line":94,"updated":"2012-11-28 02:29:00.000000000","message":"no need to pass a dict to this log?","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if pid \u003e 0:"},{"line_number":92,"context_line":"                sys.exit(0)"},{"line_number":93,"context_line":"        except OSError, e:"},{"line_number":94,"context_line":"            sys.stderr.write(_(\"fork failed: %d (%s)\\n\") %"},{"line_number":95,"context_line":"                             (e.errno, e.strerror))"},{"line_number":96,"context_line":"            sys.exit(1)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FuJQ%3D","line":94,"in_reply_to":"AAAAMH%2F%2Fu9s%3D","updated":"2012-11-28 19:22:11.000000000","message":"Done","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if self.pidfile.is_running():"},{"line_number":132,"context_line":"            self.pidfile.unlock()"},{"line_number":133,"context_line":"            message \u003d _(\u0027pidfile %s already exist. Daemon already running?\\n\u0027)"},{"line_number":134,"context_line":"            sys.stderr.write(message % self.pidfile)"},{"line_number":135,"context_line":"            sys.exit(1)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        # Start the daemon"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FurM%3D","line":134,"updated":"2012-11-28 12:30:16.000000000","message":"why use stderr and stdout to write message? why not log?","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if self.pidfile.is_running():"},{"line_number":132,"context_line":"            self.pidfile.unlock()"},{"line_number":133,"context_line":"            message \u003d _(\u0027pidfile %s already exist. Daemon already running?\\n\u0027)"},{"line_number":134,"context_line":"            sys.stderr.write(message % self.pidfile)"},{"line_number":135,"context_line":"            sys.exit(1)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        # Start the daemon"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FuJM%3D","line":134,"in_reply_to":"AAAAMH%2F%2FurM%3D","updated":"2012-11-28 19:22:11.000000000","message":"Done","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"}],"quantum/agent/linux/external_process.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ProcessManager(object):"},{"line_number":39,"context_line":"    \"\"\"An external process manager for Quantum spawned processes."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    Note: The manager expects uuid to be in cmdline."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5oc%3D","line":38,"updated":"2012-11-16 14:29:17.000000000","message":"Is this something that could also be used for the dnsmasq?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ProcessManager(object):"},{"line_number":39,"context_line":"    \"\"\"An external process manager for Quantum spawned processes."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    Note: The manager expects uuid to be in cmdline."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4xY%3D","line":38,"in_reply_to":"AAAAMH%2F%2F5oc%3D","updated":"2012-11-16 23:46:20.000000000","message":"Isn\u0027t there something similar in openstack.common?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class ProcessManager(object):"},{"line_number":39,"context_line":"    \"\"\"An external process manager for Quantum spawned processes."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    Note: The manager expects uuid to be in cmdline."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5gk%3D","line":38,"in_reply_to":"AAAAMH%2F%2F5oc%3D","updated":"2012-11-19 16:40:31.000000000","message":"You correct.  The classes are very similar, so we should be able to combine.  The problem is that DHCP has some extra functionality that we\u0027ll have to figure out the correct way to incorporate it. I was planning to add a refactoring item after this landed because I didn\u0027t want DHCP changes wrapped up in this set.\n\nThere is not anything in common to do this.  We\u0027re unique in that we spawn external services that run namespaces and cannot directly run executables.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"            msg \u003d _(\u0027Unable to access %s\u0027)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        LOG.debug(msg % file_name)"},{"line_number":102,"context_line":"        return None"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def active(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4jM%3D","line":102,"updated":"2012-11-17 09:16:18.000000000","message":"Is it necessary to return None?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"            msg \u003d _(\u0027Unable to access %s\u0027)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        LOG.debug(msg % file_name)"},{"line_number":102,"context_line":"        return None"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def active(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F3fI%3D","line":102,"in_reply_to":"AAAAMH%2F%2F4jM%3D","updated":"2012-11-19 16:40:31.000000000","message":"Strictly speaking no.  This was left in because wanted to make it explicit that this property can and will return None.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":110,"context_line":"        cmd \u003d [\u0027cat\u0027, \u0027/proc/%s/cmdline\u0027 % pid]"},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            return self.uuid in utils.execute(cmd, self.root_helper)"},{"line_number":113,"context_line":"        except RuntimeError, e:"},{"line_number":114,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4jI%3D","line":113,"updated":"2012-11-17 09:16:18.000000000","message":"Is it useful to log error here?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":110,"context_line":"        cmd \u003d [\u0027cat\u0027, \u0027/proc/%s/cmdline\u0027 % pid]"},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            return self.uuid in utils.execute(cmd, self.root_helper)"},{"line_number":113,"context_line":"        except RuntimeError, e:"},{"line_number":114,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F3fE%3D","line":113,"in_reply_to":"AAAAMH%2F%2F4jI%3D","updated":"2012-11-19 16:40:31.000000000","message":"Errors here are normal if the server reboots (the pid file will contain a stale entry).  Additionally, the disable code logs when it tries to kill a stale pid.  I can add more logging, but wasn\u0027t sure if it was actually providing value vs generating more noise in the logs.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        elif pid:"},{"line_number":72,"context_line":"            LOG.debug(_(\u0027Process for %s pid %d is stale, ignoring command\u0027) %"},{"line_number":73,"context_line":"                      (self.uuid, pid))"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            LOG.debug(_(\u0027No process started for %s\u0027) % self.uuid)"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0Lo%3D","line":73,"updated":"2012-11-21 17:18:18.000000000","message":"should this be a dict?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        elif pid:"},{"line_number":72,"context_line":"            LOG.debug(_(\u0027Process for %s pid %d is stale, ignoring command\u0027) %"},{"line_number":73,"context_line":"                      (self.uuid, pid))"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            LOG.debug(_(\u0027No process started for %s\u0027) % self.uuid)"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwNo%3D","line":73,"in_reply_to":"AAAAMH%2F%2F0Lo%3D","updated":"2012-11-27 04:23:56.000000000","message":"Yep. done","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Returns the file name for a given kind of config file.\"\"\""},{"line_number":79,"context_line":"        pids_dir \u003d os.path.abspath(os.path.normpath(self.conf.external_pids))"},{"line_number":80,"context_line":"        if ensure_pids_dir:"},{"line_number":81,"context_line":"            if not os.path.isdir(pids_dir):"},{"line_number":82,"context_line":"                os.makedirs(pids_dir, 0755)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return os.path.join(pids_dir, self.uuid + \u0027.pid\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2Fu9k%3D","line":81,"updated":"2012-11-28 02:29:00.000000000","message":"suggestion\r\n\r\n if ensure_pids_dir and not os.path.isdir(pids_dir):","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Returns the file name for a given kind of config file.\"\"\""},{"line_number":79,"context_line":"        pids_dir \u003d os.path.abspath(os.path.normpath(self.conf.external_pids))"},{"line_number":80,"context_line":"        if ensure_pids_dir:"},{"line_number":81,"context_line":"            if not os.path.isdir(pids_dir):"},{"line_number":82,"context_line":"                os.makedirs(pids_dir, 0755)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return os.path.join(pids_dir, self.uuid + \u0027.pid\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FuKM%3D","line":81,"in_reply_to":"AAAAMH%2F%2Fu9k%3D","updated":"2012-11-28 19:22:11.000000000","message":"Done","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":89,"context_line":"        file_name \u003d self.get_pid_file_name()"},{"line_number":90,"context_line":"        msg \u003d _(\u0027Error while reading %s\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            with open(file_name, \u0027r\u0027) as f:"},{"line_number":94,"context_line":"                try:"},{"line_number":95,"context_line":"                    return int(f.read())"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2Fu9g%3D","line":92,"updated":"2012-11-28 02:29:00.000000000","message":"suggestion:\r\n\r\nHow about using one try/except statement catching two exceptions?","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":89,"context_line":"        file_name \u003d self.get_pid_file_name()"},{"line_number":90,"context_line":"        msg \u003d _(\u0027Error while reading %s\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            with open(file_name, \u0027r\u0027) as f:"},{"line_number":94,"context_line":"                try:"},{"line_number":95,"context_line":"                    return int(f.read())"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FuKE%3D","line":92,"in_reply_to":"AAAAMH%2F%2Fu9g%3D","updated":"2012-11-28 19:22:11.000000000","message":"Done","commit_id":"6a324f82a0a05dbd5786f77cf8db2d5b978e4f1f"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Returns the file name for a given kind of config file.\"\"\""},{"line_number":79,"context_line":"        pids_dir \u003d os.path.abspath(os.path.normpath(self.conf.external_pids))"},{"line_number":80,"context_line":"        if ensure_pids_dir and not os.path.isdir(pids_dir):"},{"line_number":81,"context_line":"                os.makedirs(pids_dir, 0755)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return os.path.join(pids_dir, self.uuid + \u0027.pid\u0027)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2Ft24%3D","line":81,"updated":"2012-11-28 22:46:11.000000000","message":"indent nit","commit_id":"879a5bbf8e01cfa2e2fdfd170f489b62b11a404f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Returns the file name for a given kind of config file.\"\"\""},{"line_number":79,"context_line":"        pids_dir \u003d os.path.abspath(os.path.normpath(self.conf.external_pids))"},{"line_number":80,"context_line":"        if ensure_pids_dir and not os.path.isdir(pids_dir):"},{"line_number":81,"context_line":"                os.makedirs(pids_dir, 0755)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return os.path.join(pids_dir, self.uuid + \u0027.pid\u0027)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMH%2F%2Ftto%3D","line":81,"in_reply_to":"AAAAMH%2F%2Ft24%3D","updated":"2012-11-29 00:11:01.000000000","message":"Done","commit_id":"879a5bbf8e01cfa2e2fdfd170f489b62b11a404f"}],"quantum/agent/metadata/agent.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MetadataProxyHandler(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F590%3D","line":39,"updated":"2012-11-16 06:13:23.000000000","message":"maybe import from l3_db.py rather than copy paste?","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MetadataProxyHandler(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F0A0%3D","line":39,"in_reply_to":"AAAAMH%2F%2F01g%3D","updated":"2012-11-21 19:25:57.000000000","message":"Yeah, it probably would be a good idea.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MetadataProxyHandler(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F01g%3D","line":39,"in_reply_to":"AAAAMH%2F%2F590%3D","updated":"2012-11-21 04:57:27.000000000","message":"I was trying to avoid importing anything in quantum.db, so the packagers can package the agents separately from the server.  Should I file a bug to move these into qunatum.common?","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"from quantum import wsgi"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4jE%3D","line":37,"updated":"2012-11-17 09:16:18.000000000","message":"Use the former?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        ports \u003d self.qclient.list_ports("},{"line_number":104,"context_line":"            network_id\u003dnetworks,"},{"line_number":105,"context_line":"            fixed_ips\u003d[\u0027ip_address\u003d%s\u0027 % remote_address])[\u0027ports\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if len(ports) \u003d\u003d 1:"},{"line_number":108,"context_line":"            return ports[0][\u0027device_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F530%3D","line":105,"updated":"2012-11-16 07:22:54.000000000","message":"This is inefficient if we use public api to do the management work. We need two invocations if network_id is not provided.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        ports \u003d self.qclient.list_ports("},{"line_number":104,"context_line":"            network_id\u003dnetworks,"},{"line_number":105,"context_line":"            fixed_ips\u003d[\u0027ip_address\u003d%s\u0027 % remote_address])[\u0027ports\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if len(ports) \u003d\u003d 1:"},{"line_number":108,"context_line":"            return ports[0][\u0027device_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5gY%3D","line":105,"in_reply_to":"AAAAMH%2F%2F530%3D","updated":"2012-11-19 16:40:31.000000000","message":"Right.  I wanted to prove the workflow and then add caching to this function.  Metadata calls come in bursts, so caching will improve performance here.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            fixed_ips\u003d[\u0027ip_address\u003d%s\u0027 % remote_address])[\u0027ports\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if len(ports) \u003d\u003d 1:"},{"line_number":108,"context_line":"            return ports[0][\u0027device_id\u0027]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _proxy_request(self, instance_id, req):"},{"line_number":111,"context_line":"        headers \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F53w%3D","line":108,"updated":"2012-11-16 07:22:54.000000000","message":"If we think it must be one, we can remove the if statement, else we need to deal with else branch.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"            fixed_ips\u003d[\u0027ip_address\u003d%s\u0027 % remote_address])[\u0027ports\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if len(ports) \u003d\u003d 1:"},{"line_number":108,"context_line":"            return ports[0][\u0027device_id\u0027]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _proxy_request(self, instance_id, req):"},{"line_number":111,"context_line":"        headers \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5gU%3D","line":108,"in_reply_to":"AAAAMH%2F%2F53w%3D","updated":"2012-11-19 16:40:31.000000000","message":"The implicit else returns None.  Which tells the meta-data request that one could not be found.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def _proxy_request(self, instance_id, req):"},{"line_number":111,"context_line":"        headers \u003d {"},{"line_number":112,"context_line":"            \u0027X-Instance-ID\u0027: instance_id,"},{"line_number":113,"context_line":"            \u0027X-Instance-ID-Signature\u0027: self._sign_instance_id(instance_id)"},{"line_number":114,"context_line":"        }"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        url \u003d urlparse.urlunsplit(("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F56w%3D","line":113,"updated":"2012-11-16 06:14:02.000000000","message":"what is the motivation for doing shared-key auth, rather than having nova require that the caller must be an admin to specify X-Instance-ID?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def _proxy_request(self, instance_id, req):"},{"line_number":111,"context_line":"        headers \u003d {"},{"line_number":112,"context_line":"            \u0027X-Instance-ID\u0027: instance_id,"},{"line_number":113,"context_line":"            \u0027X-Instance-ID-Signature\u0027: self._sign_instance_id(instance_id)"},{"line_number":114,"context_line":"        }"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        url \u003d urlparse.urlunsplit(("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5fo%3D","line":113,"in_reply_to":"AAAAMH%2F%2F56w%3D","updated":"2012-11-19 16:40:31.000000000","message":"The nova metadata server does not use keystone or have a tenant context, so I added this to make it a little harder to spoof  X-Instance-ID requests.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        }"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":117,"context_line":"            \u0027http\u0027,"},{"line_number":118,"context_line":"            \u0027%s:%s\u0027 % (self.conf.nova_metadata_ip,"},{"line_number":119,"context_line":"                       self.conf.nova_metadata_port),"},{"line_number":120,"context_line":"            req.path_info,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F53o%3D","line":117,"updated":"2012-11-16 07:22:54.000000000","message":"what if the nova metadata is https? I am not sure if the nova-metadata server can use https.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":114,"context_line":"        }"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":117,"context_line":"            \u0027http\u0027,"},{"line_number":118,"context_line":"            \u0027%s:%s\u0027 % (self.conf.nova_metadata_ip,"},{"line_number":119,"context_line":"                       self.conf.nova_metadata_port),"},{"line_number":120,"context_line":"            req.path_info,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5fQ%3D","line":117,"in_reply_to":"AAAAMH%2F%2F53o%3D","updated":"2012-11-19 16:40:31.000000000","message":"The ami\u0027s that use the metadata service use plain http per Amazon spec.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_instance_id(self, req):"},{"line_number":89,"context_line":"        remote_address \u003d req.headers.get(\u0027X-Forwarded-For\u0027)"},{"line_number":90,"context_line":"        network_id \u003d req.headers.get(\u0027X-Quantum-Network-ID\u0027)"},{"line_number":91,"context_line":"        router_id \u003d req.headers.get(\u0027X-Quantum-Router-ID\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        if network_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F1AY%3D","line":90,"updated":"2012-11-21 00:48:13.000000000","message":"I don\u0027t think X-Quantum-Network-ID was mentioned in the spec.  Is this to handle the case where we are running in a DHCP namespace, rather than in a router?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_instance_id(self, req):"},{"line_number":89,"context_line":"        remote_address \u003d req.headers.get(\u0027X-Forwarded-For\u0027)"},{"line_number":90,"context_line":"        network_id \u003d req.headers.get(\u0027X-Quantum-Network-ID\u0027)"},{"line_number":91,"context_line":"        router_id \u003d req.headers.get(\u0027X-Quantum-Router-ID\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        if network_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F04A%3D","line":90,"in_reply_to":"AAAAMH%2F%2F1AY%3D","updated":"2012-11-21 05:17:56.000000000","message":"Yes.  I just haven\u0027t posted that portion for review.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":"            return content"},{"line_number":129,"context_line":"        elif resp.status \u003d\u003d 404:"},{"line_number":130,"context_line":"            return webob.exc.HTTPNotFound()"},{"line_number":131,"context_line":"        elif resp.status \u003d\u003d 500:"},{"line_number":132,"context_line":"            msg \u003d _("},{"line_number":133,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":134,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F1AA%3D","line":131,"updated":"2012-11-21 00:48:13.000000000","message":"should we log error message from the internal server error here?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":"            return content"},{"line_number":129,"context_line":"        elif resp.status \u003d\u003d 404:"},{"line_number":130,"context_line":"            return webob.exc.HTTPNotFound()"},{"line_number":131,"context_line":"        elif resp.status \u003d\u003d 500:"},{"line_number":132,"context_line":"            msg \u003d _("},{"line_number":133,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":134,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F02k%3D","line":131,"in_reply_to":"AAAAMH%2F%2F1AA%3D","updated":"2012-11-21 05:17:56.000000000","message":"Done","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":134,"context_line":"            )"},{"line_number":135,"context_line":"            return webob.exc.HTTPInternalServerError(explanation\u003dunicode(msg))"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            raise Exception(_(\u0027Unexpected response code: %s\u0027) % resp.status)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _sign_instance_id(self, instance_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0%2Bs%3D","line":136,"updated":"2012-11-21 01:09:56.000000000","message":"you might consider catching the HTTPForbidden that nova would throw, and print an warning message telling the operator to catch that the two shared_secrets match.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":134,"context_line":"            )"},{"line_number":135,"context_line":"            return webob.exc.HTTPInternalServerError(explanation\u003dunicode(msg))"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            raise Exception(_(\u0027Unexpected response code: %s\u0027) % resp.status)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _sign_instance_id(self, instance_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F02s%3D","line":136,"in_reply_to":"AAAAMH%2F%2F0%2Bs%3D","updated":"2012-11-21 05:17:56.000000000","message":"Good idea.  Done.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def _sign_instance_id(self, instance_id):"},{"line_number":140,"context_line":"        return hmac.new(self.conf.metadata_proxy_shared_secret,"},{"line_number":141,"context_line":"                        instance_id,"},{"line_number":142,"context_line":"                        hashlib.sha1).hexdigest()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class UnixDomainHttpProtocol(eventlet.wsgi.HttpProtocol):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0%2Fw%3D","line":142,"updated":"2012-11-21 00:48:13.000000000","message":"as long as we\u0027re being really security conscious by doing an HMAC, why not pick a more robust hash like sha256?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def _sign_instance_id(self, instance_id):"},{"line_number":140,"context_line":"        return hmac.new(self.conf.metadata_proxy_shared_secret,"},{"line_number":141,"context_line":"                        instance_id,"},{"line_number":142,"context_line":"                        hashlib.sha1).hexdigest()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class UnixDomainHttpProtocol(eventlet.wsgi.HttpProtocol):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F09o%3D","line":142,"in_reply_to":"AAAAMH%2F%2F0%2Fw%3D","updated":"2012-11-21 01:56:19.000000000","message":"We should consider revocation of metadata_proxy_shared_secret. If updating metadata_proxy_shared_secret needs restarting all component, this is big burden for operators.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def _sign_instance_id(self, instance_id):"},{"line_number":140,"context_line":"        return hmac.new(self.conf.metadata_proxy_shared_secret,"},{"line_number":141,"context_line":"                        instance_id,"},{"line_number":142,"context_line":"                        hashlib.sha1).hexdigest()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class UnixDomainHttpProtocol(eventlet.wsgi.HttpProtocol):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0xA%3D","line":142,"in_reply_to":"AAAAMH%2F%2F020%3D","updated":"2012-11-21 05:52:20.000000000","message":"I got your point now.\nHowever if metadata api server should be only on management network now, it should be documented, because metadata api runs with nova-api which is usually open for users.\nAnd also if we relying on the network level isoration, this spoofing check isn\u0027t needed IMO.\n\nThe service user password problem should be also solved.\nso I think we should not get worth situation.\n\nIf you need to authenticate proxy server, how about send Keystone token ?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def _sign_instance_id(self, instance_id):"},{"line_number":140,"context_line":"        return hmac.new(self.conf.metadata_proxy_shared_secret,"},{"line_number":141,"context_line":"                        instance_id,"},{"line_number":142,"context_line":"                        hashlib.sha1).hexdigest()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class UnixDomainHttpProtocol(eventlet.wsgi.HttpProtocol):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F020%3D","line":142,"in_reply_to":"AAAAMH%2F%2F09o%3D","updated":"2012-11-21 05:17:56.000000000","message":"@danwent Updated to sha256.\n\n@nachi The burden is about the same as changing a service user password. If a provider wants to change the secret in production, only the Nova metadata service and Quantum metadata agent need starting. Chef or other ops tools should be able to do this fairly quickly across deployments.  \n\nhmac is being used to make it harder to spoof proxy requests (and easier to detect spoofing attempts).  If the secret has been compromised, there are bigger problems as you now have someone who is successfully attacking your management network.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"            tenant_name\u003dself.conf.admin_tenant_name,"},{"line_number":66,"context_line":"            auth_url\u003dself.conf.auth_url,"},{"line_number":67,"context_line":"            auth_strategy\u003dself.conf.auth_strategy,"},{"line_number":68,"context_line":"            auth_region\u003dself.conf.auth_region"},{"line_number":69,"context_line":"        )"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @webob.dec.wsgify(RequestClass\u003dwsgi.Request)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F0LY%3D","line":68,"updated":"2012-11-21 17:18:18.000000000","message":"auth_region should be region_name","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"            tenant_name\u003dself.conf.admin_tenant_name,"},{"line_number":66,"context_line":"            auth_url\u003dself.conf.auth_url,"},{"line_number":67,"context_line":"            auth_strategy\u003dself.conf.auth_strategy,"},{"line_number":68,"context_line":"            auth_region\u003dself.conf.auth_region"},{"line_number":69,"context_line":"        )"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @webob.dec.wsgify(RequestClass\u003dwsgi.Request)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FwNc%3D","line":68,"in_reply_to":"AAAAMH%2F%2F0LY%3D","updated":"2012-11-27 04:23:56.000000000","message":"Done","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                   help\u003d\"TCP Port used by Nova metadata server.\"),"},{"line_number":54,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_shared_secret\u0027,"},{"line_number":55,"context_line":"                   default\u003d\u0027\u0027,"},{"line_number":56,"context_line":"                   help\u003d\u0027Shared secret to sign instance-id request\u0027)"},{"line_number":57,"context_line":"    ]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def __init__(self, conf):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FwBo%3D","line":56,"updated":"2012-11-27 11:11:18.000000000","message":"Does we have these options in l3_agent.ini file or some other files?","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"                   help\u003d\"TCP Port used by Nova metadata server.\"),"},{"line_number":54,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_shared_secret\u0027,"},{"line_number":55,"context_line":"                   default\u003d\u0027\u0027,"},{"line_number":56,"context_line":"                   help\u003d\u0027Shared secret to sign instance-id request\u0027)"},{"line_number":57,"context_line":"    ]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def __init__(self, conf):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Fv0c%3D","line":56,"in_reply_to":"AAAAMH%2F%2FwBo%3D","updated":"2012-11-27 16:42:29.000000000","message":"Originally, I was using the same l3_agent file.  I\u0027ve added a sample metadata_agent.ini file.","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"}],"quantum/agent/metadata/namespace_proxy.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @webob.dec.wsgify(RequestClass\u003dwsgi.Request)"},{"line_number":71,"context_line":"    def __call__(self, req):"},{"line_number":72,"context_line":"        #import pdb;pdb.set_trace()"},{"line_number":73,"context_line":"        LOG.debug(_(\"Request: %s\"), req)"},{"line_number":74,"context_line":"        if req.headers.get(\u0027X-Quantum-Instance-ID\u0027):"},{"line_number":75,"context_line":"            # prevent tenants from spoofing requests also break"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F580%3D","line":72,"updated":"2012-11-16 06:13:23.000000000","message":"remove?","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @webob.dec.wsgify(RequestClass\u003dwsgi.Request)"},{"line_number":71,"context_line":"    def __call__(self, req):"},{"line_number":72,"context_line":"        #import pdb;pdb.set_trace()"},{"line_number":73,"context_line":"        LOG.debug(_(\"Request: %s\"), req)"},{"line_number":74,"context_line":"        if req.headers.get(\u0027X-Quantum-Instance-ID\u0027):"},{"line_number":75,"context_line":"            # prevent tenants from spoofing requests also break"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F01Y%3D","line":72,"in_reply_to":"AAAAMH%2F%2F580%3D","updated":"2012-11-21 04:57:27.000000000","message":"Good catch.  Removed.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if self.router_id:"},{"line_number":95,"context_line":"            headers[\u0027X-Quantum-Router-ID\u0027] \u003d self.router_id"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            headers[\u0027X-Quantum-Network-ID\u0027] \u003d self.network_id"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":100,"context_line":"            \u0027http\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F58s%3D","line":97,"updated":"2012-11-16 06:13:23.000000000","message":"i don\u0027t seem to see anything that ensures that self.network_id is non None.  Is that an assumption here?","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if self.router_id:"},{"line_number":95,"context_line":"            headers[\u0027X-Quantum-Router-ID\u0027] \u003d self.router_id"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            headers[\u0027X-Quantum-Network-ID\u0027] \u003d self.network_id"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":100,"context_line":"            \u0027http\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2F00Y%3D","line":97,"in_reply_to":"AAAAMH%2F%2F58s%3D","updated":"2012-11-21 04:57:27.000000000","message":"It doesn\u0027t hurt is either are None - it will just take longer to fail.  I\u0027ve added a check to make things fail fast.","commit_id":"b45f99b54db5fb95e3538b2ccdb91cabe5e227cb"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"cfg.CONF.register_opt(proxy_socket)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class UnixDomainHTTPConnection(httplib.HTTPConnection):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F53Y%3D","line":42,"updated":"2012-11-16 07:22:54.000000000","message":"what do u think of getting LOG by __name__?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":39,"context_line":"cfg.CONF.register_opt(proxy_socket)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class UnixDomainHTTPConnection(httplib.HTTPConnection):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F5fE%3D","line":42,"in_reply_to":"AAAAMH%2F%2F53Y%3D","updated":"2012-11-19 16:40:31.000000000","message":"Good catch. Fixed.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"accf408a2321ddfc938406f3e4472f31caeeb9a6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"class NetworkMetadataProxyHandler(object):"},{"line_number":60,"context_line":"    \"\"\"Proxy AF_INET metadata request through Unix Domain socket."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"       The Unix domain socket allows the proxy access resource that are not"},{"line_number":63,"context_line":"       accessible within the isolated tenant context."},{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F56s%3D","line":62,"updated":"2012-11-16 06:14:02.000000000","message":"to access\n\nwe could probably benefit from more verbose doc-strings to help understand the relationships between all of these classes.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    eventlet.monkey_patch()"},{"line_number":145,"context_line":"    opts \u003d ["},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":147,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":148,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":149,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"},{"line_number":150,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F52o%3D","line":147,"updated":"2012-11-16 07:44:33.000000000","message":"I found the l3-agent will give this process router_id parameter, but without network-id parameter. So does this mean the one l3-agent can only support one network if any?","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":"    eventlet.monkey_patch()"},{"line_number":145,"context_line":"    opts \u003d ["},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":147,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":148,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":149,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"},{"line_number":150,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMH%2F%2F4SI%3D","line":147,"in_reply_to":"AAAAMH%2F%2F52o%3D","updated":"2012-11-18 09:47:55.000000000","message":"The router_id is only used in the l3_agent when namespaces are disabled. I am not sure I understand here.","commit_id":"cb9c1053e26d7ac090815fff72194ae1363b08dc"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cfg.CONF.register_opt(proxy_socket)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0%2Bg%3D","line":41,"updated":"2012-11-21 01:56:19.000000000","message":"Is this comment needed?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"cfg.CONF.register_opt(proxy_socket)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(\u0027quantum\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F02g%3D","line":41,"in_reply_to":"AAAAMH%2F%2F0%2Bg%3D","updated":"2012-11-21 05:17:56.000000000","message":"Nope.  Removed.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @webob.dec.wsgify(RequestClass\u003dwsgi.Request)"},{"line_number":71,"context_line":"    def __call__(self, req):"},{"line_number":72,"context_line":"        #import pdb;pdb.set_trace()"},{"line_number":73,"context_line":"        LOG.debug(_(\"Request: %s\"), req)"},{"line_number":74,"context_line":"        if req.headers.get(\u0027X-Quantum-Instance-ID\u0027):"},{"line_number":75,"context_line":"            # prevent tenants from spoofing requests also break"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0%2Bc%3D","line":72,"updated":"2012-11-21 01:56:19.000000000","message":"Is this comment needed?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @webob.dec.wsgify(RequestClass\u003dwsgi.Request)"},{"line_number":71,"context_line":"    def __call__(self, req):"},{"line_number":72,"context_line":"        #import pdb;pdb.set_trace()"},{"line_number":73,"context_line":"        LOG.debug(_(\"Request: %s\"), req)"},{"line_number":74,"context_line":"        if req.headers.get(\u0027X-Quantum-Instance-ID\u0027):"},{"line_number":75,"context_line":"            # prevent tenants from spoofing requests also break"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F02c%3D","line":72,"in_reply_to":"AAAAMH%2F%2F0%2Bc%3D","updated":"2012-11-21 05:17:56.000000000","message":"Good catch. Removed.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if req.headers.get(\u0027X-Quantum-Instance-ID\u0027):"},{"line_number":75,"context_line":"            # prevent tenants from spoofing requests also break"},{"line_number":76,"context_line":"            # proxy redirect cycle for misconfigured servers"},{"line_number":77,"context_line":"            return webob.exc.HTTPForbidden()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            return self._proxy_request(req.remote_addr,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0%2Fc%3D","line":77,"updated":"2012-11-21 00:48:13.000000000","message":"If i am reading things correctly, it seems like we recreate the headers from scratch below, so even if they did specify Instance-ID it would be dropped.  Or am I misreading that?  If am I misreading, then wouldn\u0027t we also need to worry about them potentially sending ROUTER-ID or NETWORK_ID headers as well?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if req.headers.get(\u0027X-Quantum-Instance-ID\u0027):"},{"line_number":75,"context_line":"            # prevent tenants from spoofing requests also break"},{"line_number":76,"context_line":"            # proxy redirect cycle for misconfigured servers"},{"line_number":77,"context_line":"            return webob.exc.HTTPForbidden()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            return self._proxy_request(req.remote_addr,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F02U%3D","line":77,"in_reply_to":"AAAAMH%2F%2F0%2Fc%3D","updated":"2012-11-21 05:17:56.000000000","message":"We are creating the headers from scratch, so they can provide all of the headers they want because they\u0027ll be ignored :)  \n\nThis condition was meant to protect against misconfigured deployments, but that scenario is really difficult to do in practice.  I\u0027ve removed it.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":"            return webob.exc.HTTPNotFound()"},{"line_number":118,"context_line":"        elif resp.status \u003d\u003d 500:"},{"line_number":119,"context_line":"            msg \u003d _("},{"line_number":120,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":"            return webob.exc.HTTPInternalServerError(explanation\u003dunicode(msg))"},{"line_number":123,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0%2Fg%3D","line":120,"updated":"2012-11-21 00:48:13.000000000","message":"do we need to generate this message both in the namespace proxy and in the metadata agent?  seems like proxy could just pass back message from agent.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":"            return webob.exc.HTTPNotFound()"},{"line_number":118,"context_line":"        elif resp.status \u003d\u003d 500:"},{"line_number":119,"context_line":"            msg \u003d _("},{"line_number":120,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":"            return webob.exc.HTTPInternalServerError(explanation\u003dunicode(msg))"},{"line_number":123,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F02E%3D","line":120,"in_reply_to":"AAAAMH%2F%2F0%2Fg%3D","updated":"2012-11-21 05:17:56.000000000","message":"Since this server is tenant facing, I\u0027m generating the message to ensure that any potentially sensitive deployment information is not shared with the tenant by returning the upstream status message.  Is this this code too paranoid? If so, I\u0027m open to returning the upstream message.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":"            return webob.exc.HTTPNotFound()"},{"line_number":118,"context_line":"        elif resp.status \u003d\u003d 500:"},{"line_number":119,"context_line":"            msg \u003d _("},{"line_number":120,"context_line":"                \u0027Remote metadata server experienced an internal server error.\u0027"},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":"            return webob.exc.HTTPInternalServerError(explanation\u003dunicode(msg))"},{"line_number":123,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F0AA%3D","line":120,"in_reply_to":"AAAAMH%2F%2F02E%3D","updated":"2012-11-21 19:30:41.000000000","message":"i agree on the goal of having a bland message for tenants, and hiding any deployment specific errors from them.  My comment was actually that I THINK the only messages the proxy would be receiving are those from the agent, and the agent seems to already have the policy of hiding specific messages and returning only bland messages, so I wasn\u0027t sure it was necessary to do it in both places.  I think there\u0027s little harm though, so its fine.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":143,"context_line":"def main():"},{"line_number":144,"context_line":"    eventlet.monkey_patch()"},{"line_number":145,"context_line":"    opts \u003d ["},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":147,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":148,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":149,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F084%3D","line":146,"updated":"2012-11-21 01:56:19.000000000","message":"no agent looks using network_id parameter. Is this needed?","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":143,"context_line":"def main():"},{"line_number":144,"context_line":"    eventlet.monkey_patch()"},{"line_number":145,"context_line":"    opts \u003d ["},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":147,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":148,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":149,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F018%3D","line":146,"in_reply_to":"AAAAMH%2F%2F084%3D","updated":"2012-11-21 05:17:56.000000000","message":"This is a provision for the 2nd part of the metadata changes for isolated tenant networks.  The namespace proxy will run within the DHCP namespace and use host routes and require special boot image configurations.","commit_id":"e617449b641e16b31fce9537e6342e705525027c"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":97,"context_line":"            \u0027http\u0027,"},{"line_number":98,"context_line":"            \u0027169.254.169.254\u0027,"},{"line_number":99,"context_line":"            path_info,"},{"line_number":100,"context_line":"            query_string,"},{"line_number":101,"context_line":"            \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyHI%3D","line":98,"updated":"2012-11-25 02:03:28.000000000","message":"we are trying to send message to metadata-agent here, right?\nVM will use 169.254.169.254:80 to access the meta data, which is accepted by namespace_proxy. And then the proxy should transfer the request to metadata-agent. So I think the IP address and port should be address and port where agent is listening on.\n\nmaybe, this address is not needed since we are using unixdomain connection with metadata-agent.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":97,"context_line":"            \u0027http\u0027,"},{"line_number":98,"context_line":"            \u0027169.254.169.254\u0027,"},{"line_number":99,"context_line":"            path_info,"},{"line_number":100,"context_line":"            query_string,"},{"line_number":101,"context_line":"            \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fw4M%3D","line":98,"in_reply_to":"AAAAMH%2F%2FyHI%3D","updated":"2012-11-27 04:23:56.000000000","message":"We\u0027re creating the unix domain a request object from scratch to prevent header injection, I used the metadata server\u0027s well-known IP here since we need some value here.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"},{"line_number":148,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyqQ%3D","line":145,"updated":"2012-11-25 02:03:28.000000000","message":"We have questions in previous patch about the network_id and router_id.\nI think it is patch #3. what is network_id in configure file?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"},{"line_number":148,"context_line":"        cfg.IntOpt(\u0027metadata_port\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fw38%3D","line":145,"in_reply_to":"AAAAMH%2F%2FyqQ%3D","updated":"2012-11-27 04:23:56.000000000","message":"These configuration parameters are being passed via the command line arguments to the namespace_proxy.  I reused the cfg module since it already handles argument parsing properly vs rolling my own implementation using argparse.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    config.setup_logging(cfg.CONF)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    proxy \u003d ProxyDaemon(cfg.CONF.pid_file,"},{"line_number":158,"context_line":"                        cfg.CONF.metadata_port,"},{"line_number":159,"context_line":"                        network_id\u003dcfg.CONF.network_id,"},{"line_number":160,"context_line":"                        router_id\u003dcfg.CONF.router_id)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FyHM%3D","line":158,"updated":"2012-11-25 02:03:28.000000000","message":"So cfg.CONF.metadata_server is not used here. Why do we need it?","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":155,"context_line":"    config.setup_logging(cfg.CONF)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    proxy \u003d ProxyDaemon(cfg.CONF.pid_file,"},{"line_number":158,"context_line":"                        cfg.CONF.metadata_port,"},{"line_number":159,"context_line":"                        network_id\u003dcfg.CONF.network_id,"},{"line_number":160,"context_line":"                        router_id\u003dcfg.CONF.router_id)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2Fw3s%3D","line":158,"in_reply_to":"AAAAMH%2F%2FyHM%3D","updated":"2012-11-27 04:23:56.000000000","message":"The namespace proxy does not l3_agent configuration file.  That file is used by the metadata_agent file.","commit_id":"5fd6a122295ff13175da5a69d6fbc548cee16914"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if self.router_id:"},{"line_number":92,"context_line":"            headers[\u0027X-Quantum-Router-ID\u0027] \u003d self.router_id"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            headers[\u0027X-Quantum-Network-ID\u0027] \u003d self.network_id"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":97,"context_line":"            \u0027http\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FwBc%3D","line":94,"updated":"2012-11-27 11:11:18.000000000","message":"I am still not clear why we need use network_id since the proxy is always called with router_id parameter.?","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if self.router_id:"},{"line_number":92,"context_line":"            headers[\u0027X-Quantum-Router-ID\u0027] \u003d self.router_id"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            headers[\u0027X-Quantum-Network-ID\u0027] \u003d self.network_id"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":97,"context_line":"            \u0027http\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Fv1Y%3D","line":94,"in_reply_to":"AAAAMH%2F%2FwBc%3D","updated":"2012-11-27 16:42:29.000000000","message":"This for the follow up patch that will enable running the metadata service on isolated networks (ie no router attached to network)","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":97,"context_line":"            \u0027http\u0027,"},{"line_number":98,"context_line":"            \u0027169.254.169.254\u0027,"},{"line_number":99,"context_line":"            path_info,"},{"line_number":100,"context_line":"            query_string,"},{"line_number":101,"context_line":"            \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FwBk%3D","line":98,"updated":"2012-11-27 11:11:18.000000000","message":"Can we leave a comment here this value is just for stuffing?","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        url \u003d urlparse.urlunsplit(("},{"line_number":97,"context_line":"            \u0027http\u0027,"},{"line_number":98,"context_line":"            \u0027169.254.169.254\u0027,"},{"line_number":99,"context_line":"            path_info,"},{"line_number":100,"context_line":"            query_string,"},{"line_number":101,"context_line":"            \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Fv1o%3D","line":98,"in_reply_to":"AAAAMH%2F%2FwBk%3D","updated":"2012-11-27 16:42:29.000000000","message":"Done","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FwBs%3D","line":144,"updated":"2012-11-27 11:11:18.000000000","message":"Who will give the proxy network_id parameter or configure option?\nWhat does it mean: a quantum network where Vms are attached to?","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Fv1s%3D","line":144,"in_reply_to":"AAAAMH%2F%2FwBs%3D","updated":"2012-11-27 16:42:29.000000000","message":"This for the follow up patch that will enable running the metadata service on isolated networks (ie no router attached to network)","commit_id":"9eef5fb22f386e084a0e31ee8421ef1b000f39ae"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2Fte8%3D","line":144,"updated":"2012-11-29 06:32:33.000000000","message":"Just as u said the network_id is for follow up patch to implement network without routers. I think we can leave it to following patches.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2FsVo%3D","line":144,"in_reply_to":"AAAAMH%2F%2FsWQ%3D","updated":"2012-11-30 01:11:52.000000000","message":"Dan,\nSure. I heard you said before that \u0027Yong\u0027s a good guy and I trust him\u0027 too. don\u0027t tell others you didn\u0027t. :)","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2FsWQ%3D","line":144,"in_reply_to":"AAAAMH%2F%2FsZE%3D","updated":"2012-11-30 00:53:07.000000000","message":"Mark\u0027s a good guy and I trust him, so as long as he pushes a new branch in the next week or two and updates the spec, I think its OK to have this in here.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d7339e398e75a5aba33cbb1cf265c4016b1df26e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2FsZE%3D","line":144,"in_reply_to":"AAAAMH%2F%2Fszo%3D","updated":"2012-11-30 00:32:26.000000000","message":"I am sorry if I gave you such impression. However I cannot see any hints about the isolated networks in your spec at https://docs.google.com/document/d/1wixS-CrHe37Fv4my9MxUVeQKDb3mUJJCwPnireQ1gn8/edit?pli\u003d1.\n\nI am open to your opinion.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"def main():"},{"line_number":142,"context_line":"    eventlet.monkey_patch()"},{"line_number":143,"context_line":"    opts \u003d ["},{"line_number":144,"context_line":"        cfg.StrOpt(\u0027network_id\u0027),"},{"line_number":145,"context_line":"        cfg.StrOpt(\u0027router_id\u0027),"},{"line_number":146,"context_line":"        cfg.StrOpt(\u0027pid_file\u0027),"},{"line_number":147,"context_line":"        cfg.BoolOpt(\u0027daemonize\u0027, default\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2Fszo%3D","line":144,"in_reply_to":"AAAAMH%2F%2Fte8%3D","updated":"2012-11-29 19:27:43.000000000","message":"There is other code in this changeset that bases it\u0027s behavior based on the X-Network-ID header.  Right now, you just have to manually invoke it and manually add host routes for isolated networks.  The next changeset just automates the process.  I don\u0027t understand the continual objection to code that is fully functional and tested and within the scope of the blueprint.","commit_id":"0c3dd5af4c65dcafbd29e4bd50a1942f73aa60a9"}]}
