)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"0ab83725828f981bb6671f319a0147ab922dba5b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add keystone v3 auth support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change enables the neutron client to use the keystone v3 API (in"},{"line_number":10,"context_line":"addition to v2).  This allows user domains and tenant/project domains to"},{"line_number":11,"context_line":"be specified.  This is necessary because keystone v2 API is deprecated"},{"line_number":12,"context_line":"as of Icehouse."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1ae5cdf2_9634824b","line":9,"updated":"2014-06-17 10:13:35.000000000","message":"s/neutron/heat ;)","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"4a68cc904218dbdcda16aac291f704eb793ef9df","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add keystone v3 auth support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change enables the neutron client to use the keystone v3 API (in"},{"line_number":10,"context_line":"addition to v2).  This allows user domains and tenant/project domains to"},{"line_number":11,"context_line":"be specified.  This is necessary because keystone v2 API is deprecated"},{"line_number":12,"context_line":"as of Icehouse."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1ae5cdf2_d4b7d038","line":9,"in_reply_to":"1ae5cdf2_9634824b","updated":"2014-06-17 17:32:47.000000000","message":"Good catch :)","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"}],"heatclient/common/http.py":[{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d0593a4c7f3c7156ee3af39f17d8ad6eddc81d82","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        return self.client_request(\"PATCH\", url, **kwargs)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"class SessionClient(HTTPClient):"},{"line_number":280,"context_line":"    \"\"\"HTTP client based on Keystone client session.\"\"\""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def __init__(self, session, auth, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_f87e0de3","line":279,"updated":"2014-06-12 21:04:11.000000000","message":"Extending the home-grown heat HTTPClient will make it more difficult in the future to remove it.  I received similar feedback in the neutron review -- and the thought there was to keep them separate with the hope that we could eventually move completely over to a common session client.","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"0ab83725828f981bb6671f319a0147ab922dba5b","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        creds \u003d {}"},{"line_number":221,"context_line":"        # FIXME(gyee): what are these used for? Obviously, username won\u0027t work"},{"line_number":222,"context_line":"        # in Keystone V3 as it is not globally unique. Do we need a separate"},{"line_number":223,"context_line":"        # header to convey domain? X-Auth-User-Domain?"},{"line_number":224,"context_line":"        if self.username:"},{"line_number":225,"context_line":"            creds[\u0027X-Auth-User\u0027] \u003d self.username"},{"line_number":226,"context_line":"        if self.password:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_d938fbd6","line":223,"updated":"2014-06-17 10:13:35.000000000","message":"These are to pass a username/password to heat which it encrypts and stores when deferred_auth_method\u003dpassword (which is currently the default but I\u0027m working towards making trusts the default, ref bug #1286157, in which case there\u0027s no longer any need to pass these headers).\n\nSo I\u0027d say we just don\u0027t pass these for v3 and move to using trusts, except for standalone mode (where heat can control a remote cloud without any local keystone service user).  In that case we may need X-Auth-User-Domain, but IMO we could consider making v3 work in standalone mode as a future enhancement.\n\nFYI here\u0027s a blog post with more details on the historical reasons for this, and our usage of trusts:\n\nhttp://hardysteven.blogspot.co.uk/2014/04/heat-auth-model-updates-part-1-trusts.html","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"c7f5e23dedccffe7ca31a73ab4e72085337a1ecf","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-Auth-Url\u0027, self.auth_url)"},{"line_number":139,"context_line":"        if self.region_name:"},{"line_number":140,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-Region-Name\u0027, self.region_name)"},{"line_number":141,"context_line":"        if self.include_pass and \u0027X-Auth-Key\u0027 not in kwargs[\u0027headers\u0027]:"},{"line_number":142,"context_line":"            kwargs[\u0027headers\u0027].update(self.credentials_headers())"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self.log_curl_request(method, url, kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e651180f","line":141,"updated":"2014-06-19 18:26:34.000000000","message":"Why is this needed. It seems unrelated to the commit message.","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"61b268f00e8f4867af9255be580e3fc9cc5249c5","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-Auth-Url\u0027, self.auth_url)"},{"line_number":139,"context_line":"        if self.region_name:"},{"line_number":140,"context_line":"            kwargs[\u0027headers\u0027].setdefault(\u0027X-Region-Name\u0027, self.region_name)"},{"line_number":141,"context_line":"        if self.include_pass and \u0027X-Auth-Key\u0027 not in kwargs[\u0027headers\u0027]:"},{"line_number":142,"context_line":"            kwargs[\u0027headers\u0027].update(self.credentials_headers())"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self.log_curl_request(method, url, kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_9d1a5b6d","line":141,"in_reply_to":"1ae5cdf2_e651180f","updated":"2014-06-24 16:44:08.000000000","message":"The changes (line 141 \u0026 187) are for issues discovered by flake8.  I will move them to a separate review to avoid confusion :)","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"c7f5e23dedccffe7ca31a73ab4e72085337a1ecf","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        creds \u003d {}"},{"line_number":221,"context_line":"        # NOTE(dhu):  (SHARDY) When deferred_auth_method\u003dpassword, Heat"},{"line_number":222,"context_line":"        # encrypts and stores username/password.  For Keystone v3, the"},{"line_number":223,"context_line":"        # intend is to use trusts since SHARDY is working towards"},{"line_number":224,"context_line":"        # deferred_auth_method\u003dtrusts as the default."},{"line_number":225,"context_line":"        # TODO(dhu): Make Keystone v3 work in Heat standalone mode.  Maye"},{"line_number":226,"context_line":"        # require X-Auth-User-Domain."}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c675fc98","line":223,"updated":"2014-06-19 18:26:34.000000000","message":"s/intend/intent/\n\nAlso you probably don\u0027t need to capitalize SHARDY.","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"61b268f00e8f4867af9255be580e3fc9cc5249c5","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        creds \u003d {}"},{"line_number":221,"context_line":"        # NOTE(dhu):  (SHARDY) When deferred_auth_method\u003dpassword, Heat"},{"line_number":222,"context_line":"        # encrypts and stores username/password.  For Keystone v3, the"},{"line_number":223,"context_line":"        # intend is to use trusts since SHARDY is working towards"},{"line_number":224,"context_line":"        # deferred_auth_method\u003dtrusts as the default."},{"line_number":225,"context_line":"        # TODO(dhu): Make Keystone v3 work in Heat standalone mode.  Maye"},{"line_number":226,"context_line":"        # require X-Auth-User-Domain."}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_1da9eb8f","line":223,"in_reply_to":"1ae5cdf2_c675fc98","updated":"2014-06-24 16:44:08.000000000","message":"Done.","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"c7f5e23dedccffe7ca31a73ab4e72085337a1ecf","unresolved":false,"context_lines":[{"line_number":283,"context_line":"class SessionClient(HTTPClient):"},{"line_number":284,"context_line":"    \"\"\"HTTP client based on Keystone client session.\"\"\""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    # NOTE(dhu):  Will eventually move to a common session client."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def __init__(self, session, auth, **kwargs):"},{"line_number":289,"context_line":"        self.session \u003d session"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e69f58b2","line":286,"updated":"2014-06-19 18:26:34.000000000","message":"Perhaps this needs to be an open bug so we don\u0027t forget?","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"61b268f00e8f4867af9255be580e3fc9cc5249c5","unresolved":false,"context_lines":[{"line_number":283,"context_line":"class SessionClient(HTTPClient):"},{"line_number":284,"context_line":"    \"\"\"HTTP client based on Keystone client session.\"\"\""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    # NOTE(dhu):  Will eventually move to a common session client."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def __init__(self, session, auth, **kwargs):"},{"line_number":289,"context_line":"        self.session \u003d session"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_f21c6e79","line":286,"in_reply_to":"1ae5cdf2_e69f58b2","updated":"2014-06-24 16:44:08.000000000","message":"Done","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"b5c43f4be2fc18ef898afa49044a7164a6d338e4","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        creds \u003d {}"},{"line_number":219,"context_line":"        # NOTE(dhu): (shardy) When deferred_auth_method\u003dpassword, Heat"},{"line_number":220,"context_line":"        # encrypts and stores username/password.  For Keystone v3, the"},{"line_number":221,"context_line":"        # intend is to use trusts since SHARDY is working towards"},{"line_number":222,"context_line":"        # deferred_auth_method\u003dtrusts as the default."},{"line_number":223,"context_line":"        # TODO(dhu): Make Keystone v3 work in Heat standalone mode.  Maye"},{"line_number":224,"context_line":"        # require X-Auth-User-Domain."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_2b36d103","line":221,"updated":"2014-07-02 18:16:13.000000000","message":"Still not fixed, intend is the wrong word, this should be \"intent\".","commit_id":"8f75a1382c1aa8c5e14a3da9bfee41d46cd1f1de"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"fb974b944edc64a7fee70c454f8987d1e5cd5363","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        creds \u003d {}"},{"line_number":219,"context_line":"        # NOTE(dhu): (shardy) When deferred_auth_method\u003dpassword, Heat"},{"line_number":220,"context_line":"        # encrypts and stores username/password.  For Keystone v3, the"},{"line_number":221,"context_line":"        # intend is to use trusts since SHARDY is working towards"},{"line_number":222,"context_line":"        # deferred_auth_method\u003dtrusts as the default."},{"line_number":223,"context_line":"        # TODO(dhu): Make Keystone v3 work in Heat standalone mode.  Maye"},{"line_number":224,"context_line":"        # require X-Auth-User-Domain."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_b6c0847d","line":221,"in_reply_to":"baada198_2b36d103","updated":"2014-07-02 18:21:34.000000000","message":"Thanks Clint.  Done.","commit_id":"8f75a1382c1aa8c5e14a3da9bfee41d46cd1f1de"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"04b452c29b98422e9f3f5ae1c7af8915a30521ec","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        # deferred_auth_method\u003dtrusts as the default."},{"line_number":223,"context_line":"        # TODO(dhu): Make Keystone v3 work in Heat standalone mode.  Maye"},{"line_number":224,"context_line":"        # require X-Auth-User-Domain."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        if self.username:"},{"line_number":227,"context_line":"            creds[\u0027X-Auth-User\u0027] \u003d self.username"},{"line_number":228,"context_line":"        if self.password:"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_a2b91417","line":225,"updated":"2014-07-10 22:38:17.000000000","message":"(not required to fix): we don\u0027t usually put an empty line after comment blocks like this.","commit_id":"f606896b01ab8d893cc6a772915c2bd7be1fce05"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"04b452c29b98422e9f3f5ae1c7af8915a30521ec","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    # NOTE(dhu):  Will eventually move to a common session client."},{"line_number":285,"context_line":"    # https://bugs.launchpad.net/python-keystoneclient/+bug/1332337"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def __init__(self, session, auth, **kwargs):"},{"line_number":288,"context_line":"        self.session \u003d session"},{"line_number":289,"context_line":"        self.auth \u003d auth"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_22450417","line":286,"updated":"2014-07-10 22:38:17.000000000","message":"Same here, the extra vertical whitespace is not needed.","commit_id":"f606896b01ab8d893cc6a772915c2bd7be1fce05"}],"heatclient/shell.py":[{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"08f8b0dd65e03e86dea1683147e73d6fcd345df9","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        # static token auth only"},{"line_number":360,"context_line":"        if auth_token:"},{"line_number":361,"context_line":"            endpoint \u003d kwargs.pop(\u0027endpoint\u0027, None)"},{"line_number":362,"context_line":"            return token_endpoint.Token(auth_url, token)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # discover the supported keystone versions using the given url"},{"line_number":365,"context_line":"        ks_discover \u003d discover.Discover(session\u003dsession, auth_url\u003dauth_url)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_e84dd5c5","line":362,"updated":"2014-06-12 20:56:50.000000000","message":"Should be\nreturn token_endpoint.Token(auth_url, auth_token)","commit_id":"396363a45594f0d9971c8803452323da8f7b50d2"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"ace2f08b1fd727d91546a291c144f47406a07c34","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        user_id \u003d kwargs.pop(\u0027user_id\u0027, None)"},{"line_number":374,"context_line":"        user_domain_name \u003d kwargs.pop(\u0027user_domain_name\u0027, None)"},{"line_number":375,"context_line":"        user_domain_id \u003d kwargs.pop(\u0027user_domain_id\u0027, None)"},{"line_number":376,"context_line":"        user_domain_name \u003d kwargs.pop(\u0027project_domain_name\u0027, None)"},{"line_number":377,"context_line":"        user_domain_id \u003d kwargs.pop(\u0027project_domain_id\u0027, None)"},{"line_number":378,"context_line":"        auth \u003d None"},{"line_number":379,"context_line":"        if v3_auth_url and v2_auth_url:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b3e9e7b8","line":376,"updated":"2014-06-05 21:51:27.000000000","message":"Should be \nproject_domain_name \u003d kwargs.pop(\u0027project_domain_name\u0027, None)","commit_id":"396363a45594f0d9971c8803452323da8f7b50d2"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"ace2f08b1fd727d91546a291c144f47406a07c34","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        user_domain_name \u003d kwargs.pop(\u0027user_domain_name\u0027, None)"},{"line_number":375,"context_line":"        user_domain_id \u003d kwargs.pop(\u0027user_domain_id\u0027, None)"},{"line_number":376,"context_line":"        user_domain_name \u003d kwargs.pop(\u0027project_domain_name\u0027, None)"},{"line_number":377,"context_line":"        user_domain_id \u003d kwargs.pop(\u0027project_domain_id\u0027, None)"},{"line_number":378,"context_line":"        auth \u003d None"},{"line_number":379,"context_line":"        if v3_auth_url and v2_auth_url:"},{"line_number":380,"context_line":"            # support both v2 and v3 auth. Use v3 if domain information is"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_13da9b16","line":377,"updated":"2014-06-05 21:51:27.000000000","message":"Should be project_domain_id \u003d kwargs.pop(\u0027project_domain_id\u0027, None)","commit_id":"396363a45594f0d9971c8803452323da8f7b50d2"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"ace2f08b1fd727d91546a291c144f47406a07c34","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                \u0027user_domain_id\u0027: args.os_user_domain_id,"},{"line_number":511,"context_line":"                \u0027user_domain_name\u0027: args.os_user_domain_name,"},{"line_number":512,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":513,"context_line":"                \u0027token\u0027: args.os_auth_token,"},{"line_number":514,"context_line":"                \u0027project_id\u0027: project_id,"},{"line_number":515,"context_line":"                \u0027project_name\u0027: project_name,"},{"line_number":516,"context_line":"                \u0027project_domain_id\u0027: args.os_project_domain_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_d32833e4","line":513,"updated":"2014-06-05 21:51:27.000000000","message":"\u0027token\u0027 is not a defined argument.  It should be auth_token.","commit_id":"396363a45594f0d9971c8803452323da8f7b50d2"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d0593a4c7f3c7156ee3af39f17d8ad6eddc81d82","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                    kwargs.pop(\u0027password\u0027, None),"},{"line_number":398,"context_line":"                    tenant_id\u003dkwargs.pop(\u0027project_id\u0027, None),"},{"line_number":399,"context_line":"                    tenant_name\u003dkwargs.pop(\u0027project_name\u0027, None))"},{"line_number":400,"context_line":"        elif v3_auth_url and not v2_auth_url:"},{"line_number":401,"context_line":"            # support only v3"},{"line_number":402,"context_line":"            auth \u003d v3_auth.Password("},{"line_number":403,"context_line":"                v3_auth_url,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_18d019c8","line":400,"updated":"2014-06-12 21:04:11.000000000","message":"Probably don\u0027t need \u0027and not v2_auth_url\u0027.","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"0b058d0358cd27212c17b56a78b7d6045b9ea969","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                    kwargs.pop(\u0027password\u0027, None),"},{"line_number":398,"context_line":"                    tenant_id\u003dkwargs.pop(\u0027project_id\u0027, None),"},{"line_number":399,"context_line":"                    tenant_name\u003dkwargs.pop(\u0027project_name\u0027, None))"},{"line_number":400,"context_line":"        elif v3_auth_url and not v2_auth_url:"},{"line_number":401,"context_line":"            # support only v3"},{"line_number":402,"context_line":"            auth \u003d v3_auth.Password("},{"line_number":403,"context_line":"                v3_auth_url,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_16d8ceed","line":400,"in_reply_to":"1ae5cdf2_18d019c8","updated":"2014-06-13 21:04:27.000000000","message":"Agree","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d0593a4c7f3c7156ee3af39f17d8ad6eddc81d82","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                project_domain_name\u003dproject_domain_name,"},{"line_number":409,"context_line":"                project_domain_id\u003dproject_domain_id,"},{"line_number":410,"context_line":"                **kwargs)"},{"line_number":411,"context_line":"        elif v2_auth_url and not v3_auth_url:"},{"line_number":412,"context_line":"            # support only v2"},{"line_number":413,"context_line":"            auth \u003d v2_auth.Password("},{"line_number":414,"context_line":"                v2_auth_url,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_58dd41df","line":411,"updated":"2014-06-12 21:04:11.000000000","message":"Probably don\u0027t need \u0027and not v3_auth_url\u0027.","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"0b058d0358cd27212c17b56a78b7d6045b9ea969","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                project_domain_name\u003dproject_domain_name,"},{"line_number":409,"context_line":"                project_domain_id\u003dproject_domain_id,"},{"line_number":410,"context_line":"                **kwargs)"},{"line_number":411,"context_line":"        elif v2_auth_url and not v3_auth_url:"},{"line_number":412,"context_line":"            # support only v2"},{"line_number":413,"context_line":"            auth \u003d v2_auth.Password("},{"line_number":414,"context_line":"                v2_auth_url,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_76f03267","line":411,"in_reply_to":"1ae5cdf2_58dd41df","updated":"2014-06-13 21:04:27.000000000","message":"Agree","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"0ab83725828f981bb6671f319a0147ab922dba5b","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                                 \u0027defaults to system socket timeout\u0027)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        # FIXME(gyee): is this option really necessary? The absence of"},{"line_number":243,"context_line":"        # os-auth-url should signify no client auth right?"},{"line_number":244,"context_line":"        parser.add_argument(\u0027--os-no-client-auth\u0027,"},{"line_number":245,"context_line":"                            default\u003dutils.env(\u0027OS_NO_CLIENT_AUTH\u0027),"},{"line_number":246,"context_line":"                            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_398abf64","line":243,"updated":"2014-06-17 10:13:35.000000000","message":"It\u0027s convenient in environments where you have the URL exported via an environment variable, but you want to tell heatclient to use the token you\u0027re providing, not get another one.","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"890e9d25f5f2b665486888041c412efcef8b1024","unresolved":false,"context_lines":[{"line_number":385,"context_line":"            # support both v2 and v3 auth. Use v3 if domain information is"},{"line_number":386,"context_line":"            # provided."},{"line_number":387,"context_line":"            if (user_domain_name or user_domain_id or project_domain_name or"},{"line_number":388,"context_line":"                    project_domain_id):"},{"line_number":389,"context_line":"                auth \u003d v3_auth.Password("},{"line_number":390,"context_line":"                    v3_auth_url,"},{"line_number":391,"context_line":"                    username\u003dusername,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_888e3acf","line":388,"updated":"2014-06-16 19:03:11.000000000","message":"Brad, This is wrong. You are not checking that combination of domain and project are unique. It should really be:\n(((user_domain_name or user_domain_id) and project_domain_name) or project_domain_id","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"9e100a2600fd86607aafd5146e375a798bd084ff","unresolved":false,"context_lines":[{"line_number":385,"context_line":"            # support both v2 and v3 auth. Use v3 if domain information is"},{"line_number":386,"context_line":"            # provided."},{"line_number":387,"context_line":"            if (user_domain_name or user_domain_id or project_domain_name or"},{"line_number":388,"context_line":"                    project_domain_id):"},{"line_number":389,"context_line":"                auth \u003d v3_auth.Password("},{"line_number":390,"context_line":"                    v3_auth_url,"},{"line_number":391,"context_line":"                    username\u003dusername,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_d7637b3f","line":388,"in_reply_to":"1ae5cdf2_888e3acf","updated":"2014-06-16 21:50:29.000000000","message":"Disagree.  If user supplied project_domain_name, but not user_domain_*, Keystone server would return an error.  User should take the appropriate action to resolve the error.  In this case, rerun the CLI command with user_domain_*.  Heat client should not automatically fall back to use Keystone v2 API.","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"52376500ea4c91c0d759d3fdd5d2f54c7bdbe666","unresolved":false,"context_lines":[{"line_number":385,"context_line":"            # support both v2 and v3 auth. Use v3 if domain information is"},{"line_number":386,"context_line":"            # provided."},{"line_number":387,"context_line":"            if (user_domain_name or user_domain_id or project_domain_name or"},{"line_number":388,"context_line":"                    project_domain_id):"},{"line_number":389,"context_line":"                auth \u003d v3_auth.Password("},{"line_number":390,"context_line":"                    v3_auth_url,"},{"line_number":391,"context_line":"                    username\u003dusername,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_d7e376a2","line":388,"in_reply_to":"1ae5cdf2_d7637b3f","updated":"2014-06-17 00:34:29.000000000","message":"You are leaving the decision back to Keystone which is fine, but if I pass a project_id only I will not auth using v3, which following the api-spec is wrong ...","commit_id":"720d79022bcd8888fddfa2cb95ad915187ca0d65"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"c7f5e23dedccffe7ca31a73ab4e72085337a1ecf","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                            help\u003d\u0027Send os-username and os-password to heat.\u0027)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # FIXME(gyee): this method should come from python-keystoneclient."},{"line_number":278,"context_line":"        # Will refactor this code once it is available."},{"line_number":279,"context_line":"        self._append_global_identity_args(parser)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e6867864","line":278,"updated":"2014-06-19 18:26:34.000000000","message":"Again, bug references?","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"61b268f00e8f4867af9255be580e3fc9cc5249c5","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                            help\u003d\u0027Send os-username and os-password to heat.\u0027)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # FIXME(gyee): this method should come from python-keystoneclient."},{"line_number":278,"context_line":"        # Will refactor this code once it is available."},{"line_number":279,"context_line":"        self._append_global_identity_args(parser)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e2518064","line":278,"in_reply_to":"1ae5cdf2_1881f9c2","updated":"2014-06-24 16:44:08.000000000","message":"Thanks Fabio for submitting the bug.","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"250c7e5b3314f0932b32a6815f607cb46ea8970a","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                            help\u003d\u0027Send os-username and os-password to heat.\u0027)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # FIXME(gyee): this method should come from python-keystoneclient."},{"line_number":278,"context_line":"        # Will refactor this code once it is available."},{"line_number":279,"context_line":"        self._append_global_identity_args(parser)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_1881f9c2","line":278,"in_reply_to":"1ae5cdf2_e6867864","updated":"2014-06-19 21:34:09.000000000","message":"Clint. I just create one: https://bugs.launchpad.net/python-keystoneclient/+bug/1332337\nand subscribed you to it ;-)","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"6c723dba6c829424ccec19a7e7b285b39c8a15af","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        return kssession.Session(verify\u003dverify, cert\u003dcert, timeout\u003dtimeout)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _get_keystone_auth(self, session, auth_url, **kwargs):"},{"line_number":399,"context_line":"        # FIXME(gyee): this code should come from keystoneclient"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        auth_token \u003d kwargs.pop(\u0027auth_token\u0027, None)"},{"line_number":402,"context_line":"        # static token auth only"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_bd2af98d","line":399,"updated":"2014-07-03 16:48:04.000000000","message":"Ideally, I\u0027d like to see bug references for the more major fixme\u0027s, or at least reference the related keystoneclient bugs/bp\u0027s so we can track keystoneclient exposing appropriate interfaces for us to consume in the future.","commit_id":"7dd7cd83fdb4c75f8a7740ba826da6c17045dd50"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"6c723dba6c829424ccec19a7e7b285b39c8a15af","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            # specified, neither is the auth URL"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"            # FIXME(dhu):  Tenant/Project name/id is not required for Keystone"},{"line_number":522,"context_line":"            # v3 with default scope.  Let Keystone do the checking instead?"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"            if not (args.os_tenant_id or args.os_tenant_name):"},{"line_number":525,"context_line":"                raise exc.CommandError(\"You must provide a tenant_id via\""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_ddbecd64","line":522,"updated":"2014-07-03 16:48:04.000000000","message":"IMO this needs to be fixed before we can merge this.\n\nI tried testing, and the following does not work:\n- Created a user (test123 in project test123 in domain test123)\n\n\nheat --os-user-domain-name test123 --os-username test123 --os-project-name test123 --os-password test123 --os-auth-url http://127.0.0.1:5000/v3 stack-list\n\ngives an error:\n\nYou must provide a tenant_id via either --os-tenant-id or via env[OS_TENANT_ID]\n\nSo we need to relax this check or accessing via the new v3 compatible interfaces won\u0027t work, or at the least provide working examples in the commit message for the parameter combinations which are expected to work.","commit_id":"7dd7cd83fdb4c75f8a7740ba826da6c17045dd50"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"24660050faeecde2893861b373b64678965f0871","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            # specified, neither is the auth URL"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"            # FIXME(dhu):  Tenant/Project name/id is not required for Keystone"},{"line_number":522,"context_line":"            # v3 with default scope.  Let Keystone do the checking instead?"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"            if not (args.os_tenant_id or args.os_tenant_name):"},{"line_number":525,"context_line":"                raise exc.CommandError(\"You must provide a tenant_id via\""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_c3f7ce57","line":522,"in_reply_to":"baada198_ddbecd64","updated":"2014-07-03 17:31:20.000000000","message":"Thanks for the feedback.  Will propose a change in the next patch to relax the check for v3.","commit_id":"7dd7cd83fdb4c75f8a7740ba826da6c17045dd50"}],"heatclient/tests/keystone_client_fixtures.py":[{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d0593a4c7f3c7156ee3af39f17d8ad6eddc81d82","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#      http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":8,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_b851e531","line":5,"updated":"2014-06-12 21:04:11.000000000","message":"Again, from feedback in the similar neutron client review, it was suggested that instead of copying this fixture from the keystone client, to instead use the public fixture available in the keystone client.  See https://review.openstack.org/#/c/92390/ for an example if you like.  I didn\u0027t find a way to avoid the version stuff, but you can use the Token class in the keystone public fixtures instead of the generate_* methods below.","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"0b058d0358cd27212c17b56a78b7d6045b9ea969","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#      http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":8,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_e4cf277d","line":5,"in_reply_to":"1ae5cdf2_b851e531","updated":"2014-06-13 21:04:27.000000000","message":"Done","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"}],"heatclient/tests/test_shell.py":[{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d0593a4c7f3c7156ee3af39f17d8ad6eddc81d82","unresolved":false,"context_lines":[{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"class ShellTestEvents(ShellBase):"},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"    FAKE_ENV \u003d {"},{"line_number":1122,"context_line":"        \u0027OS_USERNAME\u0027: \u0027username\u0027,"},{"line_number":1123,"context_line":"        \u0027OS_PASSWORD\u0027: \u0027password\u0027,"},{"line_number":1124,"context_line":"        \u0027OS_TENANT_NAME\u0027: \u0027tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_2c6d9acc","line":1121,"updated":"2014-06-12 21:04:11.000000000","message":"This is repeated several times, perhaps it should be a global?","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"c08e77807f6c7142ccf327c651610e2c87f575b2","unresolved":false,"context_lines":[{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"class ShellTestEvents(ShellBase):"},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"    FAKE_ENV \u003d {"},{"line_number":1122,"context_line":"        \u0027OS_USERNAME\u0027: \u0027username\u0027,"},{"line_number":1123,"context_line":"        \u0027OS_PASSWORD\u0027: \u0027password\u0027,"},{"line_number":1124,"context_line":"        \u0027OS_TENANT_NAME\u0027: \u0027tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_851da111","line":1121,"in_reply_to":"1ae5cdf2_2c6d9acc","updated":"2014-06-12 22:47:56.000000000","message":"++; We should make two global variables: FAKE_V2_ENV and FAKE_V3_ENV","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"0b058d0358cd27212c17b56a78b7d6045b9ea969","unresolved":false,"context_lines":[{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"class ShellTestEvents(ShellBase):"},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"    FAKE_ENV \u003d {"},{"line_number":1122,"context_line":"        \u0027OS_USERNAME\u0027: \u0027username\u0027,"},{"line_number":1123,"context_line":"        \u0027OS_PASSWORD\u0027: \u0027password\u0027,"},{"line_number":1124,"context_line":"        \u0027OS_TENANT_NAME\u0027: \u0027tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_84d82354","line":1121,"in_reply_to":"1ae5cdf2_2c6d9acc","updated":"2014-06-13 21:04:27.000000000","message":"Thanks.  Done.","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"0b058d0358cd27212c17b56a78b7d6045b9ea969","unresolved":false,"context_lines":[{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"class ShellTestEvents(ShellBase):"},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"    FAKE_ENV \u003d {"},{"line_number":1122,"context_line":"        \u0027OS_USERNAME\u0027: \u0027username\u0027,"},{"line_number":1123,"context_line":"        \u0027OS_PASSWORD\u0027: \u0027password\u0027,"},{"line_number":1124,"context_line":"        \u0027OS_TENANT_NAME\u0027: \u0027tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_64bcf7dc","line":1121,"in_reply_to":"1ae5cdf2_851da111","updated":"2014-06-13 21:04:27.000000000","message":"Agreed.  There will be FAKE_ENV_KEYSTONE_V2 and FAKE_ENV_KEYSTONE_V3 in the next patch.","commit_id":"911bd1b3a05bef45ff8b5d3c3939153b89bdefa6"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"c7f5e23dedccffe7ca31a73ab4e72085337a1ecf","unresolved":false,"context_lines":[{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    @httpretty.activate"},{"line_number":1055,"context_line":"    def test_stack_delete(self):"},{"line_number":1056,"context_line":"        self.register_keystone_auth_fixture()"},{"line_number":1057,"context_line":"        resp \u003d fakes.FakeHTTPResponse("},{"line_number":1058,"context_line":"            204,"},{"line_number":1059,"context_line":"            \u0027No Content\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a64d503d","line":1056,"updated":"2014-06-19 18:26:34.000000000","message":"Since this is basically _every_ test.. couldn\u0027t you move it ot the setUp and if there are a few that don\u0027t need it, move them to a separate test class that doesn\u0027t call it?","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"61b268f00e8f4867af9255be580e3fc9cc5249c5","unresolved":false,"context_lines":[{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    @httpretty.activate"},{"line_number":1055,"context_line":"    def test_stack_delete(self):"},{"line_number":1056,"context_line":"        self.register_keystone_auth_fixture()"},{"line_number":1057,"context_line":"        resp \u003d fakes.FakeHTTPResponse("},{"line_number":1058,"context_line":"            204,"},{"line_number":1059,"context_line":"            \u0027No Content\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e8923f57","line":1056,"in_reply_to":"1ae5cdf2_a64d503d","updated":"2014-06-24 16:44:08.000000000","message":"The usage model is that each individual test gets its own httpretty session using the decorator.  The decorator handles enablement and disablement of httpretty.  Each request has to have a response coded during register_uri(), else the request will not get mocked.  The problem with enabling httpretty at the setUp, then destroy at the cleanup is having to have a separate response coded for each test_* function.","commit_id":"a2d621f029b55d08a81100a1d04b551351b343a5"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"04b452c29b98422e9f3f5ae1c7af8915a30521ec","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"class ShellTestUserPassKeystoneV3(ShellTestUserPass):"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def setUp(self):"},{"line_number":1667,"context_line":"        super(ShellTestUserPassKeystoneV3, self).setUp()"},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"    def _set_fake_env(self):"},{"line_number":1670,"context_line":"        self.set_fake_env(FAKE_ENV_KEYSTONE_V3)"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_0259e0fd","line":1667,"updated":"2014-07-10 22:38:17.000000000","message":"This is entirely unnecessary. If you\u0027re just going to call the same setUp method, just leave it alone and that will happen.","commit_id":"f606896b01ab8d893cc6a772915c2bd7be1fce05"}]}
