)]}'
{"shade/openstackcloud.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"65aaba106f588a3b3516a9e4e390ad604405b14a","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"        Add an existing security group to an existing server. If the security"},{"line_number":1851,"context_line":"        group is already present on the server this will continue unaffected."},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"        :returns: True if security groups added, False if not"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"        :raises: ``OpenStackCloudException``, on operation error."},{"line_number":1856,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_d4dd79e0","line":1853,"updated":"2017-03-29 12:26:41.000000000","message":"This is ambigous, in particular in conjunction with the previous sentence I would read it as \"if an additional security group was added, that was not yet attached to the server, then True\" but that condition doesn\u0027t seem to be checked.","commit_id":"36c8d125a4ecc092f34516ff835b306e428253f4"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"370b4e265efbd03520df91fb966b72e0a1eb3984","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"        Add an existing security group to an existing server. If the security"},{"line_number":1851,"context_line":"        group is already present on the server this will continue unaffected."},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"        :returns: True if security groups added, False if not"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"        :raises: ``OpenStackCloudException``, on operation error."},{"line_number":1856,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5da9658d","line":1853,"in_reply_to":"ffe62b97_d4dd79e0","updated":"2017-03-29 23:03:20.000000000","message":"yea, i see that. I\u0027ve changed it to: \n\n    :returns: True if security groups are on the server, False if not\n\nWhich i don\u0027t really like the sound of but at least should be unambiguous. Let me know if you have a better idea.","commit_id":"36c8d125a4ecc092f34516ff835b306e428253f4"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"64460102e6f05e6e41ae1466033ca8207bda4e48","unresolved":false,"context_lines":[{"line_number":1845,"context_line":"        return server, sec_group_objs"},{"line_number":1846,"context_line":""},{"line_number":1847,"context_line":"    def add_server_security_groups(self, server, security_groups):"},{"line_number":1848,"context_line":"        \"\"\"Add a security group to a server."},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"        Add existing security groups to an existing server. If the security"},{"line_number":1851,"context_line":"        groups are already present on the server this will continue unaffected."}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_056ed7fe","line":1848,"updated":"2017-03-30 07:57:42.000000000","message":"Still would like to see \"list of s. groups\" here, same for remove","commit_id":"787b693fd45fcb2e17e8f0874aae400534526bdc"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"64460102e6f05e6e41ae1466033ca8207bda4e48","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"        Add existing security groups to an existing server. If the security"},{"line_number":1851,"context_line":"        groups are already present on the server this will continue unaffected."},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"        :returns: True if security groups are on the server, False if not"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"        :raises: ``OpenStackCloudException``, on operation error."},{"line_number":1856,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_6086b168","line":1853,"updated":"2017-03-30 07:57:42.000000000","message":"Maybe turn it around, matching the code:\n\nFalse if server and security groups are undefined or cannot be found, True otherwise.","commit_id":"787b693fd45fcb2e17e8f0874aae400534526bdc"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"cb0c41ae63a8d0a5ee9fd743ed26fd3def57bfa0","unresolved":false,"context_lines":[{"line_number":1836,"context_line":""},{"line_number":1837,"context_line":"                if sg is None:"},{"line_number":1838,"context_line":"                    self.log.debug(\u0027Security group %s not found for adding\u0027,"},{"line_number":1839,"context_line":"                                   sg)"},{"line_number":1840,"context_line":""},{"line_number":1841,"context_line":"                    return None, None"},{"line_number":1842,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dfeb2761_63f23109","line":1839,"updated":"2017-03-30 22:59:11.000000000","message":"Small nit, the \"adding\" here can actually be hit on the delete call too. May cause small amounts of confusion when reading logs on a failed delete call.","commit_id":"88d8a37cfae9b23acfeda76b354880e68de8c96f"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"cb0c41ae63a8d0a5ee9fd743ed26fd3def57bfa0","unresolved":false,"context_lines":[{"line_number":1864,"context_line":"        for sg in security_groups:"},{"line_number":1865,"context_line":"            self._compute_client.post("},{"line_number":1866,"context_line":"                \u0027/servers/%s/action\u0027 % server.id,"},{"line_number":1867,"context_line":"                json\u003d{\u0027addSecurityGroup\u0027: {\u0027name\u0027: sg.name}})"},{"line_number":1868,"context_line":""},{"line_number":1869,"context_line":"        return True"},{"line_number":1870,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dfeb2761_6340f108","line":1867,"updated":"2017-03-30 22:59:11.000000000","message":"OpenStack APIs are inconsistent aobut things like this but can I have two different security groups with the same name and attach them separately using a uuid? In which case should we use sg.id here? (assuming thats even a valid key in the sg dict)","commit_id":"88d8a37cfae9b23acfeda76b354880e68de8c96f"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"cb0c41ae63a8d0a5ee9fd743ed26fd3def57bfa0","unresolved":false,"context_lines":[{"line_number":1890,"context_line":"            try:"},{"line_number":1891,"context_line":"                self._compute_client.post("},{"line_number":1892,"context_line":"                    \u0027/servers/%s/action\u0027 % server.id,"},{"line_number":1893,"context_line":"                    json\u003d{\u0027removeSecurityGroup\u0027: {\u0027name\u0027: sg.name}})"},{"line_number":1894,"context_line":""},{"line_number":1895,"context_line":"            except OpenStackCloudURINotFound as e:"},{"line_number":1896,"context_line":"                # NOTE(jamielennox): Is this ok? If we remove something that"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfeb2761_4345ed16","line":1893,"updated":"2017-03-30 22:59:11.000000000","message":"See above comment.","commit_id":"88d8a37cfae9b23acfeda76b354880e68de8c96f"}],"shade/tests/unit/test_security_groups.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"1d9cd7d2c782fab2dc814c8104f44ec272bf97ea","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        # the provider shade apparently immediately calls out to neutron for a"},{"line_number":382,"context_line":"        # whole bunch of information. I have no idea how this is supposed to"},{"line_number":383,"context_line":"        # work. If I could have called neutron I wouldn\u0027t be using nova for"},{"line_number":384,"context_line":"        # secgroups would I?"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        return ["},{"line_number":387,"context_line":"            dict(method\u003d\u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_607ca3eb","line":384,"updated":"2017-03-29 09:12:20.000000000","message":"Shade fills in data that can be broken by querying neutron - specifically filling in the addresses dict. However, you\u0027re right- for flows like this it\u0027s a complete waste of energy and I\u0027ve been meaning to fix it: https://review.openstack.org/451264 - thanks for the nudge!\n\nAlso - thanks for writing this method, even though the patch above should obviate the need for it here, it\u0027ll be super useful when we start reworking server unittests.","commit_id":"36c8d125a4ecc092f34516ff835b306e428253f4"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"370b4e265efbd03520df91fb966b72e0a1eb3984","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        # the provider shade apparently immediately calls out to neutron for a"},{"line_number":382,"context_line":"        # whole bunch of information. I have no idea how this is supposed to"},{"line_number":383,"context_line":"        # work. If I could have called neutron I wouldn\u0027t be using nova for"},{"line_number":384,"context_line":"        # secgroups would I?"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        return ["},{"line_number":387,"context_line":"            dict(method\u003d\u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5ddba54d","line":384,"in_reply_to":"ffe62b97_607ca3eb","updated":"2017-03-29 23:03:20.000000000","message":"Excellent - i\u0027ve rebased on top of that and so this function goes away. \n\nI guess you can always find it here for when you need it.","commit_id":"36c8d125a4ecc092f34516ff835b306e428253f4"}]}
