)]}'
{"bindep.txt":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"1f23b1cdb93b03e03eb2fef08c1538004b665694","unresolved":false,"context_lines":[{"line_number":13,"context_line":"mysql-client [platform:dpkg test]"},{"line_number":14,"context_line":"mysql-devel [platform:rpm test]"},{"line_number":15,"context_line":"mysql-server [test]"},{"line_number":16,"context_line":"nginx [platform:dpkg test]"},{"line_number":17,"context_line":"postgresql [test]"},{"line_number":18,"context_line":"postgresql-client [platform:dpkg test]"},{"line_number":19,"context_line":"postgresql-devel [platform:rpm test]"}],"source_content_type":"text/plain","patch_set":12,"id":"7a77a97e_a37fb264","line":16,"updated":"2016-11-17 11:22:23.000000000","message":"nginx is also the same in Fedora/CentOS/RHEL, you can likely remove the platfform:dpkg target.\n\nYou should also remove the \u0027test\u0027 target as this is not a test-only dependency.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"}],"neutron/agent/metadata/namespace_proxy.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"9026cf34e4222cf7397035956a02d52a40ad2cee","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":177,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":178,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":179,"context_line":"        cfg.BoolOpt(\u0027metadata_proxy_use_nginx_if_available\u0027,"},{"line_number":180,"context_line":"                    default\u003dTrue,"},{"line_number":181,"context_line":"                    help\u003d_(\"Use Nginx as the metadata proxy, if the nginx \""},{"line_number":182,"context_line":"                           \"binary is installed locally.\")),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6895a0_71e10ed0","line":179,"updated":"2016-10-25 21:11:41.000000000","message":"I clearly don\u0027t think this deserves an option. if the footprint is really good, aside as the extra binary dependency (being widely available afaik), why else would deployments use the old process?","commit_id":"9715ba2761a4479054d3f377632ef5c3d888df28"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"edda98bb5980b257d569586797b0474619e895e0","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":177,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":178,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":179,"context_line":"        cfg.BoolOpt(\u0027metadata_proxy_use_nginx_if_available\u0027,"},{"line_number":180,"context_line":"                    default\u003dTrue,"},{"line_number":181,"context_line":"                    help\u003d_(\"Use Nginx as the metadata proxy, if the nginx \""},{"line_number":182,"context_line":"                           \"binary is installed locally.\")),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6895a0_d15f3a3f","line":179,"in_reply_to":"da6895a0_71e10ed0","updated":"2016-10-25 21:43:27.000000000","message":"Ack, I\u0027d be fine with that.","commit_id":"9715ba2761a4479054d3f377632ef5c3d888df28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"9026cf34e4222cf7397035956a02d52a40ad2cee","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        "},{"line_number":200,"context_line":"        todo"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Exec and take over!"},{"line_number":203,"context_line":"        "},{"line_number":204,"context_line":"        todo"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6895a0_d1d2daff","line":202,"updated":"2016-10-25 21:11:41.000000000","message":"You\u0027re gonna use popen, os.fork?","commit_id":"9715ba2761a4479054d3f377632ef5c3d888df28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"84cb69b7954a2e71bce12fce3c01a38095de2f69","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        "},{"line_number":200,"context_line":"        todo"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Exec and take over!"},{"line_number":203,"context_line":"        "},{"line_number":204,"context_line":"        todo"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6895a0_65a5c4b3","line":202,"in_reply_to":"da6895a0_115a924f","updated":"2016-10-26 04:03:42.000000000","message":"good. That\u0027s what I wanted to make sure because leaving this process behind would defeat the point of this fix!","commit_id":"9715ba2761a4479054d3f377632ef5c3d888df28"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"edda98bb5980b257d569586797b0474619e895e0","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        "},{"line_number":200,"context_line":"        todo"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Exec and take over!"},{"line_number":203,"context_line":"        "},{"line_number":204,"context_line":"        todo"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6895a0_115a924f","line":202,"in_reply_to":"da6895a0_d1d2daff","updated":"2016-10-25 21:43:27.000000000","message":"Neither, I was going to exec(), since there\u0027s no reason to leave this python process laying around, we might as well just use it.","commit_id":"9715ba2761a4479054d3f377632ef5c3d888df28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"648cb4006cc8dcab52bc30acb2895246a0a9b523","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _where(self, cmd):"},{"line_number":43,"context_line":"        try:"},{"line_number":44,"context_line":"            return subprocess.check_output([\"where\", cmd]).strip()"},{"line_number":45,"context_line":"        except Exception:"},{"line_number":46,"context_line":"            return \u0027\u0027"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_fed46748","line":44,"updated":"2016-10-26 18:58:25.000000000","message":"I must admit, I am not sure this goes down well with me, as it\u0027s very opinionated and we may fail with no ability to know whether we ever run nginx if not by doing `ps` after the fact. There\u0027s gotta be a cleaner way to know whether the env has the tool and how to execute it.","commit_id":"b04c62eb33a2ff599d9c1102fc096e32cde03adb"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"36e6b438c105ccbbdf291fe3684395553e980d4c","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _where(self, cmd):"},{"line_number":43,"context_line":"        try:"},{"line_number":44,"context_line":"            return subprocess.check_output([\"where\", cmd]).strip()"},{"line_number":45,"context_line":"        except Exception:"},{"line_number":46,"context_line":"            return \u0027\u0027"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_59dd6d6f","line":44,"in_reply_to":"ba5da102_fed46748","updated":"2016-10-26 19:56:17.000000000","message":"Yep, I\u0027d already decided to go another way with this bit.","commit_id":"b04c62eb33a2ff599d9c1102fc096e32cde03adb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"33a579dd90f70ca800ee3ffc73f8ced1bc4983f9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":95,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":96,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_nginx_path\u0027,"},{"line_number":97,"context_line":"                   default\u003d\u0027/usr/sbin/nginx\u0027,"},{"line_number":98,"context_line":"                   help\u003d_(\"Path to nginx, if available, to use instead of the \""},{"line_number":99,"context_line":"                          \"pure python metadata proxy server in each \""},{"line_number":100,"context_line":"                          \"namespace.\")),"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5da102_540c4f94","line":97,"updated":"2016-10-27 04:11:20.000000000","message":"that\u0027s what I was thinking.","commit_id":"71c30f6204be1a1303bbea6057f578e5a1a8188f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"118483498997dda2d0f6223568b8d0362950a78b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_cc089ddc","line":46,"updated":"2016-10-30 20:28:24.000000000","message":"IIUC if nginix is installed on host administrator should put empty value for metadata_proxy_nginix_path to disable using nginix. IMHO it is not very intuitive.\n\nWhy not provide additional option \"use_nginix_proxy\" (or something like that) to tell exactly is it can be used or not?","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"31e0a713587397548ea7fa7b6382043b23606621","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a461143_44ce84b5","line":46,"in_reply_to":"3a461143_28a73450","updated":"2017-02-01 19:42:23.000000000","message":"I have a feeling we\u0027re overthinking this. You\u0027re suggesting that an operator finds a bug that is so critical that he/she is willing to revert its use for the neutron metadata proxy and yet continue to use it unpatched for front-facing services? This must be some freaky bug!","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"2ce26f2fa73409a6a0babcae12dffae35c07a7aa","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_154514b2","line":46,"in_reply_to":"3a461143_44ce84b5","updated":"2017-02-07 08:37:42.000000000","message":"For example: nginx crashes under condition X.\n\nBut, yes, may be it\u0027s overthinking, I agree. nginx or even haproxy are mature software pieces at this point in time and we will be using a very small subset of features.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f54eee36e92361422851a569d6dd9071fd171dbd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_74f70159","line":46,"in_reply_to":"7a77a97e_5a1c2077","updated":"2016-11-17 17:43:40.000000000","message":"If it will be logged which proxy is used and if it will be documented that user should remove nginx if he don\u0027t want to use it here than it could be ok for me. Thx.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"884d03a0f562cbe493b97982908bc02f0f38373e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a461143_28a73450","line":46,"in_reply_to":"7a77a97e_74f70159","updated":"2017-01-27 12:35:35.000000000","message":"Sorry to join the party late.\n\nWhat if the operator is using nginx as a frontend to other services, but he wants to use the old python-based version for any nginx-found bug related to metadata proxy?.\n\nI agree we had lot\u0027s of knobs, but this wouldn\u0027t be a mandatory-to-set-knob, it would be a knob you can use in case of panic.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8b2d6c47d306f21734b27f4b5bf1e9089d2b89f0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_5a1c2077","line":46,"in_reply_to":"7a77a97e_9426b9cc","updated":"2016-11-16 21:50:56.000000000","message":"Frankly, it seems the most practical one in the most common real life scenario. If nginx is buggy, one will revert/upgrade to get rid of the bug.\n\nBear in mind that we might want to kill the python daemon at some point in the future, so giving a temporary knob to switch back and forth seems superfluous.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"67e0399d6baafb298ed8f909b9795be3295e54c9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_9426b9cc","line":46,"in_reply_to":"7a77a97e_9ed97a86","updated":"2016-11-16 07:43:29.000000000","message":"I know that this is kind of solution but IMHO it\u0027s not user friendly. I remember that some time ago I had some problem with connections to rabbitmq (not in Neutron) with SSL and after few hours of looking for solution I finally found in code that I need to uninstall one library and then other will be used and ssl should works. It is kind of solution but do You really want to go this way?","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0d8c7ad41d548ddd2c0be6957f7c7d99492ec061","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_9ed97a86","line":46,"in_reply_to":"ba5da102_2bde3c11","updated":"2016-11-16 06:00:40.000000000","message":"solution: uninstall nginix","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"06a4e070d4cc113b5313dda6b7e64ab000c7cb62","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_2bde3c11","line":46,"in_reply_to":"ba5da102_b772b4ab","updated":"2016-11-01 08:51:30.000000000","message":"I\u0027m not telling that it will be common \"use case\" but imaging situation that some version of nginix will have some bug which will impact metadata (I don\u0027t know what bug could be there), then user don\u0027t have easy way to switch to python proxy here.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6e48b08c31778f51fb7c5dc081dd2cc985180803","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.proxy_socket \u003d proxy_socket"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def run(self):"},{"line_number":46,"context_line":"        if self.nginx_path and os.path.exists(self.nginx_path):"},{"line_number":47,"context_line":"            handler \u003d proxy_nginx.NginxMetadataProxyHandler("},{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_b772b4ab","line":46,"in_reply_to":"ba5da102_cc089ddc","updated":"2016-10-31 23:39:54.000000000","message":"Why would someone not want something with a smaller memory footprint and at the same time functionally equivalent? Or even care whether one mechanism needs to be used instead of the other?\n\nI am not being sarcastic...I am genuinely curious.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4e94a8751a6cb1914f7f61f0a83328a17fd61a98","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            handler \u003d proxy_python.NetworkMetadataProxyHandler("},{"line_number":52,"context_line":"                self.network_id,"},{"line_number":53,"context_line":"                self.router_id)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_6cdcf112","line":51,"updated":"2016-10-30 21:48:37.000000000","message":"also if operator will install nginx but will by mistake give wrong path to it in  config option (e.g. will use default which will be wrong) it will be silently ignored and python proxy will be used without any notice of it in logs, right?","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"59cf02f4f13005c3433174117040f4f68f090670","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                self.network_id,"},{"line_number":49,"context_line":"                self.router_id)"},{"line_number":50,"context_line":"        else:"},{"line_number":51,"context_line":"            handler \u003d proxy_python.NetworkMetadataProxyHandler("},{"line_number":52,"context_line":"                self.network_id,"},{"line_number":53,"context_line":"                self.router_id)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_1e3baa9d","line":51,"in_reply_to":"ba5da102_6cdcf112","updated":"2016-11-16 06:01:37.000000000","message":"we should definitely log what handler we\u0027re using.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"1f23b1cdb93b03e03eb2fef08c1538004b665694","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":97,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":98,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":99,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_nginx_path\u0027,"},{"line_number":100,"context_line":"                   default\u003d\u0027/usr/sbin/nginx\u0027,"},{"line_number":101,"context_line":"                   help\u003d_(\"Path to nginx, if available, to use instead of the \""},{"line_number":102,"context_line":"                          \"pure python metadata proxy server in each \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_a35b32f5","line":99,"updated":"2016-11-17 11:22:23.000000000","message":"How about we use \u0027which\u0027 or \u0027nginv -v\u0027 to detect if nginx is installed? For the record Fedora also uses that same path for nginx, but if there exists distros that don\u0027t happen to use that binary path, silently reverting to the Python implementation would be unexpected. Let\u0027s not add a config option for something we can detect in code?","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94ad1a6df905c3aea259e2bbd57f204f63920510","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":97,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":98,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":99,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_nginx_path\u0027,"},{"line_number":100,"context_line":"                   default\u003d\u0027/usr/sbin/nginx\u0027,"},{"line_number":101,"context_line":"                   help\u003d_(\"Path to nginx, if available, to use instead of the \""},{"line_number":102,"context_line":"                          \"pure python metadata proxy server in each \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_e1aae4d3","line":99,"in_reply_to":"5a74a57a_27bcf56b","updated":"2016-11-23 22:43:02.000000000","message":"for those we assume the binary is in the PATH. I am not sure that\u0027s a reasonable assumption for nginx, and that\u0027s probably Doug\u0027s operating assumption.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"2ce26f2fa73409a6a0babcae12dffae35c07a7aa","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":97,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":98,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":99,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_nginx_path\u0027,"},{"line_number":100,"context_line":"                   default\u003d\u0027/usr/sbin/nginx\u0027,"},{"line_number":101,"context_line":"                   help\u003d_(\"Path to nginx, if available, to use instead of the \""},{"line_number":102,"context_line":"                          \"pure python metadata proxy server in each \""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_55679c4c","line":99,"in_reply_to":"5a74a57a_e1aae4d3","updated":"2017-02-07 08:37:42.000000000","message":"Unless there\u0027s a good reason (@doug?) I\u0027d stick to the iptables/ipset,etc pattern and not add another knob to this. keepalived is very nearly in the same category of software as nginx or haproxy.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"860504fa606efb39f1d92b7fa188907e379fa9ad","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":97,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":98,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":99,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_nginx_path\u0027,"},{"line_number":100,"context_line":"                   default\u003d\u0027/usr/sbin/nginx\u0027,"},{"line_number":101,"context_line":"                   help\u003d_(\"Path to nginx, if available, to use instead of the \""},{"line_number":102,"context_line":"                          \"pure python metadata proxy server in each \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_27bcf56b","line":99,"in_reply_to":"7a77a97e_712ab391","updated":"2016-11-23 19:22:45.000000000","message":"That doesn\u0027t seem consistent with how we use iptables, ipset, openvswitch, keepalived, etc. We\u0027ve added binary requirements to Neutron before, what\u0027s the difference? We even have the bindep tool now to signal to binary dependencies to packagers.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5148b232a067d65c346a64638ca4610593214141","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    help\u003d_(\"Watch file log. Log watch should be disabled when \""},{"line_number":97,"context_line":"                           \"metadata_proxy_user/group has no read/write \""},{"line_number":98,"context_line":"                           \"permissions on metadata proxy log file.\")),"},{"line_number":99,"context_line":"        cfg.StrOpt(\u0027metadata_proxy_nginx_path\u0027,"},{"line_number":100,"context_line":"                   default\u003d\u0027/usr/sbin/nginx\u0027,"},{"line_number":101,"context_line":"                   help\u003d_(\"Path to nginx, if available, to use instead of the \""},{"line_number":102,"context_line":"                          \"pure python metadata proxy server in each \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_712ab391","line":99,"in_reply_to":"7a77a97e_a35b32f5","updated":"2016-11-17 17:25:48.000000000","message":"these are not guaranteed to work, in other words be bulletproof to determine how to get hold of the executable.","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"}],"neutron/agent/metadata/proxy_python.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d383e7bb1f7bb47e80c645cd68637bd9c95e4df9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkMetadataProxyHandler(object):"},{"line_number":32,"context_line":"    \"\"\"Proxy AF_INET metadata request through Unix Domain socket."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    The Unix domain socket allows the proxy access resource that are not"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_2b09f131","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":13},"updated":"2016-10-31 14:37:21.000000000","message":"why not Python..?","commit_id":"46c9ff70e366542d2d35c6ba3b1a129713811849"}]}
