)]}'
{"tempest/cmd/javelin.py":[{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"70b89b366052a2af761a2e631fea2d4ac84755fc","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            self.assertEqual(volume[\u0027id\u0027], attachment[\u0027volume_id\u0027])"},{"line_number":261,"context_line":"            self.assertEqual(server_id, attachment[\u0027server_id\u0027])"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def check_networks(self):"},{"line_number":264,"context_line":"        pass"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_8990ea4f","line":263,"updated":"2014-06-17 08:04:48.000000000","message":"WIP","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"95d9357b83fb39f22359fe332f6c4daee6e5ca3d","unresolved":false,"context_lines":[{"line_number":330,"context_line":"#######################"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"def _get_network_by_name(client, name):"},{"line_number":333,"context_line":"    r, body \u003d client.networks.list_networks()"},{"line_number":334,"context_line":"    for network in body[\u0027networks\u0027]:"},{"line_number":335,"context_line":"        if name \u003d\u003d network[\u0027name\u0027]:"},{"line_number":336,"context_line":"            return network"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_df8d402c","line":333,"updated":"2014-06-17 09:05:10.000000000","message":"You should raise an error in case of error (check r).","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"0278d79aedb43d130625403d6ff17d7e66e9b8f7","unresolved":false,"context_lines":[{"line_number":330,"context_line":"#######################"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"def _get_network_by_name(client, name):"},{"line_number":333,"context_line":"    r, body \u003d client.networks.list_networks()"},{"line_number":334,"context_line":"    for network in body[\u0027networks\u0027]:"},{"line_number":335,"context_line":"        if name \u003d\u003d network[\u0027name\u0027]:"},{"line_number":336,"context_line":"            return network"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_f9d69752","line":333,"in_reply_to":"1ae5cdf2_df8d402c","updated":"2014-06-17 10:22:24.000000000","message":"Done","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"95d9357b83fb39f22359fe332f6c4daee6e5ca3d","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    for network in body[\u0027networks\u0027]:"},{"line_number":335,"context_line":"        if name \u003d\u003d network[\u0027name\u0027]:"},{"line_number":336,"context_line":"            return network"},{"line_number":337,"context_line":"    return None"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"def _get_subnet_by_name(client, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_df5c60f3","line":337,"updated":"2014-06-17 09:05:10.000000000","message":"You should raise an exception if the network is not found.","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"0278d79aedb43d130625403d6ff17d7e66e9b8f7","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    for network in body[\u0027networks\u0027]:"},{"line_number":335,"context_line":"        if name \u003d\u003d network[\u0027name\u0027]:"},{"line_number":336,"context_line":"            return network"},{"line_number":337,"context_line":"    return None"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"def _get_subnet_by_name(client, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_19e6e344","line":337,"in_reply_to":"1ae5cdf2_df5c60f3","updated":"2014-06-17 10:22:24.000000000","message":"Done","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"95d9357b83fb39f22359fe332f6c4daee6e5ca3d","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    return None"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"def _get_subnet_by_name(client, name):"},{"line_number":341,"context_line":"    r, body \u003d client.networks.list_networks()"},{"line_number":342,"context_line":"    for subnet in body[\u0027subnets\u0027]:"},{"line_number":343,"context_line":"        if name \u003d\u003d subnet[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_bf5dd417","line":340,"updated":"2014-06-17 09:05:10.000000000","message":"These 3 functions are pretty close except of the line \"for network in ...:\". You can factorize the code:\n\ndef _get_network(client, key, name):\n    r, body \u003d client.networks.list_networks()\n    if r !\u003d 200:\n        raise ValueError(\"unable to list networks: [%s] %s\"\n                         % (r, body))\n    for obj in body[key]:\n        if network[\u0027name\u0027] \u003d\u003d name:\n            return obj\n    raise ValueError(\u0027Network object %s not found: %r\u0027 % (key, name))","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"0278d79aedb43d130625403d6ff17d7e66e9b8f7","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    return None"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"def _get_subnet_by_name(client, name):"},{"line_number":341,"context_line":"    r, body \u003d client.networks.list_networks()"},{"line_number":342,"context_line":"    for subnet in body[\u0027subnets\u0027]:"},{"line_number":343,"context_line":"        if name \u003d\u003d subnet[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_39e1df2a","line":340,"in_reply_to":"1ae5cdf2_bf5dd417","updated":"2014-06-17 10:22:24.000000000","message":"Done","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"95d9357b83fb39f22359fe332f6c4daee6e5ca3d","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":361,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":362,"context_line":"        names \u003d [x[\u0027name\u0027] for x in body]"},{"line_number":363,"context_line":"        if network[\u0027name\u0027] in names:"},{"line_number":364,"context_line":"            continue"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        client.networks.create_network(network[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_df80e04b","line":363,"updated":"2014-06-17 09:05:10.000000000","message":"You can write:\n\nif any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body): ...","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"0278d79aedb43d130625403d6ff17d7e66e9b8f7","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":361,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":362,"context_line":"        names \u003d [x[\u0027name\u0027] for x in body]"},{"line_number":363,"context_line":"        if network[\u0027name\u0027] in names:"},{"line_number":364,"context_line":"            continue"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        client.networks.create_network(network[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_5936abb5","line":363,"in_reply_to":"1ae5cdf2_df80e04b","updated":"2014-06-17 10:22:24.000000000","message":"Done","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"95d9357b83fb39f22359fe332f6c4daee6e5ca3d","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        client \u003d client_for_user(subnet[\u0027owner\u0027])"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        network_id \u003d _get_network_by_name(client, subnet[\u0027network\u0027])[\u0027id\u0027]"},{"line_number":374,"context_line":"        client.networks.create_subnet(network_id, subnet[\u0027cidr\u0027])"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"def create_routers(routers):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_9fef38e9","line":374,"updated":"2014-06-17 09:05:10.000000000","message":"It would be easier to read if you get the network id at the second line:\n\nnetwork \u003d _get_network_by_name(client, subnet[\u0027network\u0027])\nclient.networks.create_subnet(network[\u0027id\u0027], subnet[\u0027cidr\u0027])","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"0278d79aedb43d130625403d6ff17d7e66e9b8f7","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        client \u003d client_for_user(subnet[\u0027owner\u0027])"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        network_id \u003d _get_network_by_name(client, subnet[\u0027network\u0027])[\u0027id\u0027]"},{"line_number":374,"context_line":"        client.networks.create_subnet(network_id, subnet[\u0027cidr\u0027])"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"def create_routers(routers):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_19198322","line":374,"in_reply_to":"1ae5cdf2_9fef38e9","updated":"2014-06-17 10:22:24.000000000","message":"Done","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"95d9357b83fb39f22359fe332f6c4daee6e5ca3d","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    create_images(RES[\u0027images\u0027])"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    # validate neutron is enabled"},{"line_number":510,"context_line":"    if (CONF.service_available.neutron):"},{"line_number":511,"context_line":"        create_networks(RES[\u0027networks\u0027])"},{"line_number":512,"context_line":"        create_subnets(RES[\u0027subnets\u0027])"},{"line_number":513,"context_line":"        create_routers(RES[\u0027routers\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_7f90ac4e","line":510,"updated":"2014-06-17 09:05:10.000000000","message":"No need for parenthesis here.","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"0278d79aedb43d130625403d6ff17d7e66e9b8f7","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    create_images(RES[\u0027images\u0027])"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    # validate neutron is enabled"},{"line_number":510,"context_line":"    if (CONF.service_available.neutron):"},{"line_number":511,"context_line":"        create_networks(RES[\u0027networks\u0027])"},{"line_number":512,"context_line":"        create_subnets(RES[\u0027subnets\u0027])"},{"line_number":513,"context_line":"        create_routers(RES[\u0027routers\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_39d55fe5","line":510,"in_reply_to":"1ae5cdf2_7f90ac4e","updated":"2014-06-17 10:22:24.000000000","message":"Done","commit_id":"804d007cfb6f5635f6a9405c05733a561dc0b4f3"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"f3b178afd7a2620c651955ea4a0bc6ed97afce11","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # code is self testing."},{"line_number":201,"context_line":"        # self.check_volumes()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        if (CONF.service_available.neutron):"},{"line_number":204,"context_line":"            self.check_networking()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def check_users(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_9709f433","line":203,"updated":"2014-08-14 22:36:44.000000000","message":"Ditto about checking if baremetal driver enabled, as mentioned bellow","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"6fd924dac091e1cca101f760bdc3f8ef64a2eb2c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # code is self testing."},{"line_number":201,"context_line":"        # self.check_volumes()"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        if (CONF.service_available.neutron):"},{"line_number":204,"context_line":"            self.check_networking()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def check_users(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_7d90a243","line":203,"in_reply_to":"7ac7a964_9709f433","updated":"2014-08-19 11:30:38.000000000","message":"Done","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"f3b178afd7a2620c651955ea4a0bc6ed97afce11","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        image_id \u003d _get_image_by_name(client, server[\u0027image\u0027])[\u0027id\u0027]"},{"line_number":528,"context_line":"        flavor_id \u003d _get_flavor_by_name(client, server[\u0027flavor\u0027])[\u0027id\u0027]"},{"line_number":529,"context_line":"        # Validate if Neutron is actually enabled in Tempest"},{"line_number":530,"context_line":"        if CONF.service_available.neutron:"},{"line_number":531,"context_line":"            network_id \u003d _get_network_by_name(client, server[\u0027network\u0027])[\u0027id\u0027]"},{"line_number":532,"context_line":"            client.servers.create_server(server[\u0027name\u0027], image_id, flavor_id,"},{"line_number":533,"context_line":"                                         networks\u003dnetwork_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_022760b7","line":530,"updated":"2014-08-14 22:36:44.000000000","message":"Ditto about checking if baremetal driver enabled, as mentioned bellow","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"6fd924dac091e1cca101f760bdc3f8ef64a2eb2c","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        image_id \u003d _get_image_by_name(client, server[\u0027image\u0027])[\u0027id\u0027]"},{"line_number":528,"context_line":"        flavor_id \u003d _get_flavor_by_name(client, server[\u0027flavor\u0027])[\u0027id\u0027]"},{"line_number":529,"context_line":"        # Validate if Neutron is actually enabled in Tempest"},{"line_number":530,"context_line":"        if CONF.service_available.neutron:"},{"line_number":531,"context_line":"            network_id \u003d _get_network_by_name(client, server[\u0027network\u0027])[\u0027id\u0027]"},{"line_number":532,"context_line":"            client.servers.create_server(server[\u0027name\u0027], image_id, flavor_id,"},{"line_number":533,"context_line":"                                         networks\u003dnetwork_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_3d770a3c","line":530,"in_reply_to":"7ac7a964_022760b7","updated":"2014-08-19 11:30:38.000000000","message":"Done","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"f3b178afd7a2620c651955ea4a0bc6ed97afce11","unresolved":false,"context_lines":[{"line_number":606,"context_line":"    create_images(RES[\u0027images\u0027])"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    # validate neutron is enabled"},{"line_number":609,"context_line":"    if CONF.service_available.neutron:"},{"line_number":610,"context_line":"        create_networks(RES[\u0027networks\u0027])"},{"line_number":611,"context_line":"        create_subnets(RES[\u0027subnets\u0027])"},{"line_number":612,"context_line":"        create_routers(RES[\u0027routers\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_57883c1f","line":609,"updated":"2014-08-14 22:36:44.000000000","message":"We need to also skip creation of network/subnet/router in the case that neutron is enabled and ironic/baremetal virt driver is enabled (CONF.baremetal.driver_enabled).  Tenant network isolation isnt supported in this case and we assume admin has set up a neutron flat network environment /w a shared fixed network for all tenants to use.  In this case, network/subnet/router creation can be skipped and the server booted the same as nova network.","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"6fd924dac091e1cca101f760bdc3f8ef64a2eb2c","unresolved":false,"context_lines":[{"line_number":606,"context_line":"    create_images(RES[\u0027images\u0027])"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    # validate neutron is enabled"},{"line_number":609,"context_line":"    if CONF.service_available.neutron:"},{"line_number":610,"context_line":"        create_networks(RES[\u0027networks\u0027])"},{"line_number":611,"context_line":"        create_subnets(RES[\u0027subnets\u0027])"},{"line_number":612,"context_line":"        create_routers(RES[\u0027routers\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_5d72064a","line":609,"in_reply_to":"7ac7a964_57883c1f","updated":"2014-08-19 11:30:38.000000000","message":"Done","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # In this case, network/subnet/router creation can be skipped and the"},{"line_number":208,"context_line":"        # server booted the same as nova network."},{"line_number":209,"context_line":"        if (CONF.service_available.neutron and"},{"line_number":210,"context_line":"           not CONF.baremetal.driver_enabled):"},{"line_number":211,"context_line":"            self.check_networking()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def check_users(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_58e85410","line":210,"updated":"2014-08-19 11:53:21.000000000","message":"Just a commentary: Technically this condition is not even needed here - if neutron is not use, resources for networks, subnets and ports will be empty. I agree it will save time.","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # In this case, network/subnet/router creation can be skipped and the"},{"line_number":208,"context_line":"        # server booted the same as nova network."},{"line_number":209,"context_line":"        if (CONF.service_available.neutron and"},{"line_number":210,"context_line":"           not CONF.baremetal.driver_enabled):"},{"line_number":211,"context_line":"            self.check_networking()"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def check_users(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_98966cef","line":210,"in_reply_to":"1abeadc6_58e85410","updated":"2014-08-19 13:28:27.000000000","message":"Good to know, thanks.","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                \"Couldn\u0027t find expected server %s\" % server[\u0027name\u0027])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"            r, found \u003d client.servers.get_server(found[\u0027id\u0027])"},{"line_number":258,"context_line":"            # get the ipv4 address"},{"line_number":259,"context_line":"            addr \u003d found[\u0027addresses\u0027][\u0027private\u0027][0][\u0027addr\u0027]"},{"line_number":260,"context_line":"            for count in range(60):"},{"line_number":261,"context_line":"                return_code \u003d os.system(\"ping -c1 \" + addr)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_b8d40848","line":258,"updated":"2014-08-19 11:53:21.000000000","message":"We need to put condition (if CONF.service_available.neutron) here because of different body.","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                \"Couldn\u0027t find expected server %s\" % server[\u0027name\u0027])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"            r, found \u003d client.servers.get_server(found[\u0027id\u0027])"},{"line_number":258,"context_line":"            # get the ipv4 address"},{"line_number":259,"context_line":"            addr \u003d found[\u0027addresses\u0027][\u0027private\u0027][0][\u0027addr\u0027]"},{"line_number":260,"context_line":"            for count in range(60):"},{"line_number":261,"context_line":"                return_code \u003d os.system(\"ping -c1 \" + addr)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d3e9a781","line":258,"in_reply_to":"1abeadc6_b8d40848","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            self.assertEqual(server_id, attachment[\u0027server_id\u0027])"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def check_networking(self):"},{"line_number":287,"context_line":"        \"\"\"Check that the networks are still there.\"\"\""},{"line_number":288,"context_line":"        for network in self.res[\u0027networks\u0027]:"},{"line_number":289,"context_line":"            client \u003d client_for_user(network[\u0027owner\u0027])"},{"line_number":290,"context_line":"            found \u003d _get_network_by_name(client, network[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_18c5fc8d","line":287,"updated":"2014-08-19 11:53:21.000000000","message":"Here is the same pattern, with implemented _get_resource_by_name below, we could do:\n\n for resources in (\u0027networks\u0027, \u0027subnets\u0027, \u0027ports\u0027):\n     for res in self.res[resources]:\n         client \u003d client_for_user(res[\u0027owner\u0027])\n         found \u003d _get_resource_by_name(client, resources, res[\u0027name\u0027])\n         self.assertIsNotNone(\n             ...","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            self.assertEqual(server_id, attachment[\u0027server_id\u0027])"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def check_networking(self):"},{"line_number":287,"context_line":"        \"\"\"Check that the networks are still there.\"\"\""},{"line_number":288,"context_line":"        for network in self.res[\u0027networks\u0027]:"},{"line_number":289,"context_line":"            client \u003d client_for_user(network[\u0027owner\u0027])"},{"line_number":290,"context_line":"            found \u003d _get_network_by_name(client, network[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_ae7da2e9","line":287,"in_reply_to":"1abeadc6_18c5fc8d","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":409,"context_line":""},{"line_number":410,"context_line":"def _get_network_by_name(client, name):"},{"line_number":411,"context_line":"    r, body \u003d client.networks.list_networks()"},{"line_number":412,"context_line":"    if r !\u003d 200:"},{"line_number":413,"context_line":"        raise ValueError(\"unable to list networks: [%s] %s\" % (r, body))"},{"line_number":414,"context_line":"    for network in body[\u0027networks\u0027]:"},{"line_number":415,"context_line":"        if name \u003d\u003d network[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_58bf74fb","line":412,"updated":"2014-08-19 11:53:21.000000000","message":"Would it be better to accept all 2xx codes?\n\n if r \u003e\u003d 300:\n     ...","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":409,"context_line":""},{"line_number":410,"context_line":"def _get_network_by_name(client, name):"},{"line_number":411,"context_line":"    r, body \u003d client.networks.list_networks()"},{"line_number":412,"context_line":"    if r !\u003d 200:"},{"line_number":413,"context_line":"        raise ValueError(\"unable to list networks: [%s] %s\" % (r, body))"},{"line_number":414,"context_line":"    for network in body[\u0027networks\u0027]:"},{"line_number":415,"context_line":"        if name \u003d\u003d network[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_4e07ae1c","line":412,"in_reply_to":"1abeadc6_58bf74fb","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    for router in body[\u0027routers\u0027]:"},{"line_number":435,"context_line":"        if name \u003d\u003d router[\u0027name\u0027]:"},{"line_number":436,"context_line":"            return router"},{"line_number":437,"context_line":"    raise ValueError(\u0027Router %s not found\u0027 % name)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"def create_networks(networks):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_b83b289b","line":437,"updated":"2014-08-19 11:53:21.000000000","message":"All of three functions above have the same pattern. What about:\n\n def _get_resource_by_name(client, resource, name):\n     get_resources \u003d getattr(client.networks \u0027list_%s\u0027 % resource)\n     if get_resources is None:\n         raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)\n     r, body \u003d get_resources()\n     if r \u003e\u003d 300:\n         raise ...\n     for res in body[resource]:\n         if name \u003d\u003d res[\u0027name\u0027]:\n             return res\n     raise ...","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    for router in body[\u0027routers\u0027]:"},{"line_number":435,"context_line":"        if name \u003d\u003d router[\u0027name\u0027]:"},{"line_number":436,"context_line":"            return router"},{"line_number":437,"context_line":"    raise ValueError(\u0027Router %s not found\u0027 % name)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"def create_networks(networks):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_09cf7080","line":437,"in_reply_to":"1abeadc6_b83b289b","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":441,"context_line":"    for network in networks:"},{"line_number":442,"context_line":"        client \u003d client_for_user(network[\u0027owner\u0027])"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":445,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":446,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":447,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d842a40f","line":444,"updated":"2014-08-19 11:53:21.000000000","message":"... create a network if ...","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":441,"context_line":"    for network in networks:"},{"line_number":442,"context_line":"        client \u003d client_for_user(network[\u0027owner\u0027])"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":445,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":446,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":447,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_49aec886","line":444,"in_reply_to":"1abeadc6_d842a40f","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":445,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":446,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":447,"context_line":"            continue"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        client.networks.create_network(network[\u0027name\u0027])"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_3847181f","line":447,"updated":"2014-08-19 11:53:21.000000000","message":"I would LOG a warning here that there are duplicate names.","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":445,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":446,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":447,"context_line":"            continue"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        client.networks.create_network(network[\u0027name\u0027])"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_295a6c50","line":447,"in_reply_to":"1abeadc6_3847181f","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        try:"},{"line_number":459,"context_line":"            client.networks.create_subnet(subnet[\u0027name\u0027], network[\u0027id\u0027],"},{"line_number":460,"context_line":"                                          subnet[\u0027cidr\u0027])"},{"line_number":461,"context_line":"        except exceptions.Badquest as e:"},{"line_number":462,"context_line":"            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":463,"context_line":"            if not is_overlapping_cidr:"},{"line_number":464,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_785190d7","line":461,"updated":"2014-08-19 11:53:21.000000000","message":"BadRequest?","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        try:"},{"line_number":459,"context_line":"            client.networks.create_subnet(subnet[\u0027name\u0027], network[\u0027id\u0027],"},{"line_number":460,"context_line":"                                          subnet[\u0027cidr\u0027])"},{"line_number":461,"context_line":"        except exceptions.Badquest as e:"},{"line_number":462,"context_line":"            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":463,"context_line":"            if not is_overlapping_cidr:"},{"line_number":464,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_a9359cf8","line":461,"in_reply_to":"1abeadc6_785190d7","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":472,"context_line":"        r, body \u003d client.networks.network_client.list_routers"},{"line_number":473,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d router[\u0027name\u0027] for item in body):"},{"line_number":474,"context_line":"            continue"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        client.networks.create_router(router[\u0027name\u0027])"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_b86248ab","line":474,"updated":"2014-08-19 11:53:21.000000000","message":"I would LOG a warning here that there are duplicate names.","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":472,"context_line":"        r, body \u003d client.networks.network_client.list_routers"},{"line_number":473,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d router[\u0027name\u0027] for item in body):"},{"line_number":474,"context_line":"            continue"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        client.networks.create_router(router[\u0027name\u0027])"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_29218cb4","line":474,"in_reply_to":"1abeadc6_b86248ab","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            client.networks.add_router_interface_with_subnet_id(router_id,"},{"line_number":488,"context_line":"                                                                subnet_id)"},{"line_number":489,"context_line":"            # connect routers to exteral network if set to \"gateway\""},{"line_number":490,"context_line":"            if router[\u0027gateway\u0027] is True:"},{"line_number":491,"context_line":"                if CONF.network.public_network_id:"},{"line_number":492,"context_line":"                    ext_net \u003d CONF.network.public_network_id"},{"line_number":493,"context_line":"                    client.networks._update_router("}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d859c4ff","line":490,"updated":"2014-08-19 11:53:21.000000000","message":"if router[\u0027gateway\u0027]:","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":487,"context_line":"            client.networks.add_router_interface_with_subnet_id(router_id,"},{"line_number":488,"context_line":"                                                                subnet_id)"},{"line_number":489,"context_line":"            # connect routers to exteral network if set to \"gateway\""},{"line_number":490,"context_line":"            if router[\u0027gateway\u0027] is True:"},{"line_number":491,"context_line":"                if CONF.network.public_network_id:"},{"line_number":492,"context_line":"                    ext_net \u003d CONF.network.public_network_id"},{"line_number":493,"context_line":"                    client.networks._update_router("}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_6902a40c","line":490,"in_reply_to":"1abeadc6_d859c4ff","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                        external_gateway_info\u003dext_net)"},{"line_number":496,"context_line":"                else:"},{"line_number":497,"context_line":"                    raise ValueError(\u0027public_network_id is not configured.\u0027)"},{"line_number":498,"context_line":"                    return 1"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"#######################"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_f85cc0ef","line":498,"updated":"2014-08-19 11:53:21.000000000","message":"This line is not reachable.","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                        external_gateway_info\u003dext_net)"},{"line_number":496,"context_line":"                else:"},{"line_number":497,"context_line":"                    raise ValueError(\u0027public_network_id is not configured.\u0027)"},{"line_number":498,"context_line":"                    return 1"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"#######################"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_ad13e75a","line":498,"in_reply_to":"1abeadc6_f85cc0ef","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4812c00a3d01dd2ec71824e4e07c1ddda89bc7cf","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            server_id \u003d body[\u0027id\u0027]"},{"line_number":546,"context_line":"            client.servers.wait_for_server_status(server_id, \u0027ACTIVE\u0027)"},{"line_number":547,"context_line":"        # otherwise, fallback to nova-network"},{"line_number":548,"context_line":"        else:"},{"line_number":549,"context_line":"            resp, body \u003d client.servers.create_server(server[\u0027name\u0027], image_id,"},{"line_number":550,"context_line":"                                                      flavor_id)"},{"line_number":551,"context_line":"            server_id \u003d body[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_38cab86e","line":548,"updated":"2014-08-19 11:53:21.000000000","message":"Suggestion:\n kwargs \u003d dict()\n if (CONF.service_available.neutron and\n         not CONF.baremetal.driver_enabled):\n     network_id \u003d _get_network_by_name(client, server[\u0027network\u0027])[\u0027id\u0027]\n     kwargs[\u0027networks\u0027] \u003d network_id\n resp, body \u003d client.servers.create_server(\n     server[\u0027name\u0027], image_id, flavor_id, **kwargs)\n client.servers.wait_for_server_status(body[\u0027id\u0027], \u0027ACTIVE\u0027)","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"1b33b3ea85dcba96f871c384538012df3b6d7e06","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            server_id \u003d body[\u0027id\u0027]"},{"line_number":546,"context_line":"            client.servers.wait_for_server_status(server_id, \u0027ACTIVE\u0027)"},{"line_number":547,"context_line":"        # otherwise, fallback to nova-network"},{"line_number":548,"context_line":"        else:"},{"line_number":549,"context_line":"            resp, body \u003d client.servers.create_server(server[\u0027name\u0027], image_id,"},{"line_number":550,"context_line":"                                                      flavor_id)"},{"line_number":551,"context_line":"            server_id \u003d body[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_4d6253ae","line":548,"in_reply_to":"1abeadc6_38cab86e","updated":"2014-08-19 13:28:27.000000000","message":"Done","commit_id":"d74b0c1a35482a83812e0db8dd3bcc1c6f25340b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7beafcde57fd3cb7bbc00243934bdef01a33a2d5","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        for res_type in (\u0027networks\u0027, \u0027subnets\u0027, \u0027ports\u0027):"},{"line_number":292,"context_line":"            for res in self.res[res_type]:"},{"line_number":293,"context_line":"                client \u003d client_for_user(res[\u0027owner\u0027])"},{"line_number":294,"context_line":"                # resource_type is singular so we drop the last \"s\" caracter."},{"line_number":295,"context_line":"                found \u003d _get_resource_by_name(client, res_type, res[\u0027name\u0027])"},{"line_number":296,"context_line":"                self.assertIsNotNone("},{"line_number":297,"context_line":"                    found,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_0dd77bee","line":294,"updated":"2014-08-19 13:37:09.000000000","message":"This is not true, it\u0027s plural. Or am I missing something?","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"50b7e6f0482bddf3f5bbc625e19453be7a091d68","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        for res_type in (\u0027networks\u0027, \u0027subnets\u0027, \u0027ports\u0027):"},{"line_number":292,"context_line":"            for res in self.res[res_type]:"},{"line_number":293,"context_line":"                client \u003d client_for_user(res[\u0027owner\u0027])"},{"line_number":294,"context_line":"                # resource_type is singular so we drop the last \"s\" caracter."},{"line_number":295,"context_line":"                found \u003d _get_resource_by_name(client, res_type, res[\u0027name\u0027])"},{"line_number":296,"context_line":"                self.assertIsNotNone("},{"line_number":297,"context_line":"                    found,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_707d246e","line":294,"in_reply_to":"1abeadc6_0dd77bee","updated":"2014-08-19 13:51:25.000000000","message":"a wrong comment I forget to drop :-)","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7beafcde57fd3cb7bbc00243934bdef01a33a2d5","unresolved":false,"context_lines":[{"line_number":399,"context_line":"#######################"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"def _get_resource_by_name(client, resource, name):"},{"line_number":402,"context_line":"    get_resources \u003d getattr(client.networks + \u0027.list_%s\u0027 % resource)"},{"line_number":403,"context_line":"    if get_resources is None:"},{"line_number":404,"context_line":"        raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)"},{"line_number":405,"context_line":"    r, body \u003d get_resources()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_edaddf89","line":402,"updated":"2014-08-19 13:37:09.000000000","message":"Does it work? client.networks is instance of NetworkClientJSON and you are concatenating it with string. It should be:\n\n getattr(client.networks, \u0027list_%s\u0027 % resource)","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"50b7e6f0482bddf3f5bbc625e19453be7a091d68","unresolved":false,"context_lines":[{"line_number":399,"context_line":"#######################"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"def _get_resource_by_name(client, resource, name):"},{"line_number":402,"context_line":"    get_resources \u003d getattr(client.networks + \u0027.list_%s\u0027 % resource)"},{"line_number":403,"context_line":"    if get_resources is None:"},{"line_number":404,"context_line":"        raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)"},{"line_number":405,"context_line":"    r, body \u003d get_resources()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f0e7743e","line":402,"in_reply_to":"1abeadc6_edaddf89","updated":"2014-08-19 13:51:25.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"feb5ec44642d1ec9157837711b78b8e48cfbae49","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)"},{"line_number":405,"context_line":"    r, body \u003d get_resources()"},{"line_number":406,"context_line":"    if not (200 \u003e\u003d int(r[\u0027status\u0027]) \u003c 299):"},{"line_number":407,"context_line":"        raise ValueError(\"unable to list networks: [%s] %s\" % (r, body))"},{"line_number":408,"context_line":"    for res in body[resource]:"},{"line_number":409,"context_line":"        if name \u003d\u003d res[\u0027name\u0027]:"},{"line_number":410,"context_line":"            return res"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_70e8c4b4","line":407,"updated":"2014-08-19 13:54:43.000000000","message":"raise ValueError(\"unable to list %s: [%s] %s\" % (r, resource, body))","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"739cc7d588c99757de40ef199e78be83e77a485f","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)"},{"line_number":405,"context_line":"    r, body \u003d get_resources()"},{"line_number":406,"context_line":"    if not (200 \u003e\u003d int(r[\u0027status\u0027]) \u003c 299):"},{"line_number":407,"context_line":"        raise ValueError(\"unable to list networks: [%s] %s\" % (r, body))"},{"line_number":408,"context_line":"    for res in body[resource]:"},{"line_number":409,"context_line":"        if name \u003d\u003d res[\u0027name\u0027]:"},{"line_number":410,"context_line":"            return res"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d63c30c2","line":407,"in_reply_to":"1abeadc6_70e8c4b4","updated":"2014-08-19 14:23:26.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"feb5ec44642d1ec9157837711b78b8e48cfbae49","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    for res in body[resource]:"},{"line_number":409,"context_line":"        if name \u003d\u003d res[\u0027name\u0027]:"},{"line_number":410,"context_line":"            return res"},{"line_number":411,"context_line":"        raise ValueError(\u0027Network %s not found\u0027 % name)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"def create_networks(networks):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_501668a8","line":411,"updated":"2014-08-19 13:54:43.000000000","message":"Should be executed after for loop ends.","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"739cc7d588c99757de40ef199e78be83e77a485f","unresolved":false,"context_lines":[{"line_number":408,"context_line":"    for res in body[resource]:"},{"line_number":409,"context_line":"        if name \u003d\u003d res[\u0027name\u0027]:"},{"line_number":410,"context_line":"            return res"},{"line_number":411,"context_line":"        raise ValueError(\u0027Network %s not found\u0027 % name)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"def create_networks(networks):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_36756498","line":411,"in_reply_to":"1abeadc6_501668a8","updated":"2014-08-19 14:23:26.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7beafcde57fd3cb7bbc00243934bdef01a33a2d5","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        client \u003d client_for_user(network[\u0027owner\u0027])"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        # only create a network if the name isn\u0027t here"},{"line_number":419,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":420,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":421,"context_line":"            LOG.warning(\"Dupplicated network name: %s\" % network[\u0027name\u0027])"},{"line_number":422,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_adf8477d","line":419,"updated":"2014-08-19 13:37:09.000000000","message":"client.networks.list_networks()","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"50b7e6f0482bddf3f5bbc625e19453be7a091d68","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        client \u003d client_for_user(network[\u0027owner\u0027])"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        # only create a network if the name isn\u0027t here"},{"line_number":419,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":420,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":421,"context_line":"            LOG.warning(\"Dupplicated network name: %s\" % network[\u0027name\u0027])"},{"line_number":422,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_90ce40b3","line":419,"in_reply_to":"1abeadc6_adf8477d","updated":"2014-08-19 13:51:25.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7beafcde57fd3cb7bbc00243934bdef01a33a2d5","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        # only create a network if the name isn\u0027t here"},{"line_number":419,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":420,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":421,"context_line":"            LOG.warning(\"Dupplicated network name: %s\" % network[\u0027name\u0027])"},{"line_number":422,"context_line":"            continue"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_ed207ff9","line":420,"updated":"2014-08-19 13:37:09.000000000","message":"for item in body[\u0027networks\u0027]","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"50b7e6f0482bddf3f5bbc625e19453be7a091d68","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        # only create a network if the name isn\u0027t here"},{"line_number":419,"context_line":"        r, body \u003d client.list_networks()"},{"line_number":420,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d network[\u0027name\u0027] for item in body):"},{"line_number":421,"context_line":"            LOG.warning(\"Dupplicated network name: %s\" % network[\u0027name\u0027])"},{"line_number":422,"context_line":"            continue"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_5062e8ad","line":420,"in_reply_to":"1abeadc6_ed207ff9","updated":"2014-08-19 13:51:25.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"feb5ec44642d1ec9157837711b78b8e48cfbae49","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    for subnet in subnets:"},{"line_number":429,"context_line":"        client \u003d client_for_user(subnet[\u0027owner\u0027])"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        network \u003d _get_resource_by_name(client, \u0027network\u0027, subnet[\u0027network\u0027])"},{"line_number":432,"context_line":"        # ensure we don\u0027t overlap with another subnet in the network"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            client.networks.create_subnet(subnet[\u0027name\u0027], network[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_50d74823","line":431,"updated":"2014-08-19 13:54:43.000000000","message":"(client, \u0027networks\u0027, subnet[\u0027network\u0027])","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"739cc7d588c99757de40ef199e78be83e77a485f","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    for subnet in subnets:"},{"line_number":429,"context_line":"        client \u003d client_for_user(subnet[\u0027owner\u0027])"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        network \u003d _get_resource_by_name(client, \u0027network\u0027, subnet[\u0027network\u0027])"},{"line_number":432,"context_line":"        # ensure we don\u0027t overlap with another subnet in the network"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            client.networks.create_subnet(subnet[\u0027name\u0027], network[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_16b5c830","line":431,"in_reply_to":"1abeadc6_50d74823","updated":"2014-08-19 14:23:26.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7beafcde57fd3cb7bbc00243934bdef01a33a2d5","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        # ensure we don\u0027t overlap with another subnet in the network"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            client.networks.create_subnet(subnet[\u0027name\u0027], network[\u0027id\u0027],"},{"line_number":435,"context_line":"                                          subnet[\u0027cidr\u0027])"},{"line_number":436,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":437,"context_line":"            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":438,"context_line":"            if not is_overlapping_cidr:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_ad3f6724","line":435,"updated":"2014-08-19 13:37:09.000000000","message":"subnet[\u0027range\u0027] instead of subnet[\u0027cidr\u0027]","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"50b7e6f0482bddf3f5bbc625e19453be7a091d68","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        # ensure we don\u0027t overlap with another subnet in the network"},{"line_number":433,"context_line":"        try:"},{"line_number":434,"context_line":"            client.networks.create_subnet(subnet[\u0027name\u0027], network[\u0027id\u0027],"},{"line_number":435,"context_line":"                                          subnet[\u0027cidr\u0027])"},{"line_number":436,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":437,"context_line":"            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":438,"context_line":"            if not is_overlapping_cidr:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_90af2094","line":435,"in_reply_to":"1abeadc6_ad3f6724","updated":"2014-08-19 13:51:25.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"feb5ec44642d1ec9157837711b78b8e48cfbae49","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        client \u003d client_for_user(router[\u0027owner\u0027])"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":447,"context_line":"        r, body \u003d client.networks.network_client.list_routers"},{"line_number":448,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d router[\u0027name\u0027] for item in body):"},{"line_number":449,"context_line":"            LOG.warning(\"Dupplicated router name: %s\" % router[\u0027name\u0027])"},{"line_number":450,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b096dc92","line":447,"updated":"2014-08-19 13:54:43.000000000","message":"client.networks.list_routers()","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"739cc7d588c99757de40ef199e78be83e77a485f","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        client \u003d client_for_user(router[\u0027owner\u0027])"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":447,"context_line":"        r, body \u003d client.networks.network_client.list_routers"},{"line_number":448,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d router[\u0027name\u0027] for item in body):"},{"line_number":449,"context_line":"            LOG.warning(\"Dupplicated router name: %s\" % router[\u0027name\u0027])"},{"line_number":450,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b696d492","line":447,"in_reply_to":"1abeadc6_b096dc92","updated":"2014-08-19 14:23:26.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7beafcde57fd3cb7bbc00243934bdef01a33a2d5","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":447,"context_line":"        r, body \u003d client.networks.network_client.list_routers"},{"line_number":448,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d router[\u0027name\u0027] for item in body):"},{"line_number":449,"context_line":"            LOG.warning(\"Dupplicated router name: %s\" % router[\u0027name\u0027])"},{"line_number":450,"context_line":"            continue"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_6de9cf7f","line":448,"updated":"2014-08-19 13:37:09.000000000","message":"Maybe there should be body[\u0027routers\u0027] , didn\u0027t get here yet :)","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"50b7e6f0482bddf3f5bbc625e19453be7a091d68","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # only create a router if the name isn\u0027t here"},{"line_number":447,"context_line":"        r, body \u003d client.networks.network_client.list_routers"},{"line_number":448,"context_line":"        if any(item[\u0027name\u0027] \u003d\u003d router[\u0027name\u0027] for item in body):"},{"line_number":449,"context_line":"            LOG.warning(\"Dupplicated router name: %s\" % router[\u0027name\u0027])"},{"line_number":450,"context_line":"            continue"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_70836404","line":448,"in_reply_to":"1abeadc6_6de9cf7f","updated":"2014-08-19 13:51:25.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"feb5ec44642d1ec9157837711b78b8e48cfbae49","unresolved":false,"context_lines":[{"line_number":456,"context_line":"    for router in routers:"},{"line_number":457,"context_line":"        client \u003d client_for_user(router[\u0027owner\u0027])"},{"line_number":458,"context_line":"        router_id \u003d _get_resource_by_name(client,"},{"line_number":459,"context_line":"                                          \u0027router\u0027, router[\u0027name\u0027])[\u0027id\u0027]"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        for subnet in router[\u0027subnet\u0027]:"},{"line_number":462,"context_line":"            subnet_id \u003d _get_resource_by_name(client,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_5030289e","line":459,"updated":"2014-08-19 13:54:43.000000000","message":"\u0027routers\u0027","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"739cc7d588c99757de40ef199e78be83e77a485f","unresolved":false,"context_lines":[{"line_number":456,"context_line":"    for router in routers:"},{"line_number":457,"context_line":"        client \u003d client_for_user(router[\u0027owner\u0027])"},{"line_number":458,"context_line":"        router_id \u003d _get_resource_by_name(client,"},{"line_number":459,"context_line":"                                          \u0027router\u0027, router[\u0027name\u0027])[\u0027id\u0027]"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        for subnet in router[\u0027subnet\u0027]:"},{"line_number":462,"context_line":"            subnet_id \u003d _get_resource_by_name(client,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f6904c97","line":459,"in_reply_to":"1abeadc6_5030289e","updated":"2014-08-19 14:23:26.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"feb5ec44642d1ec9157837711b78b8e48cfbae49","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        for subnet in router[\u0027subnet\u0027]:"},{"line_number":462,"context_line":"            subnet_id \u003d _get_resource_by_name(client,"},{"line_number":463,"context_line":"                                              \u0027subnet\u0027, router[\u0027subnet\u0027])[\u0027id\u0027]"},{"line_number":464,"context_line":"            # connect routers to their subnets"},{"line_number":465,"context_line":"            client.networks.add_router_interface_with_subnet_id(router_id,"},{"line_number":466,"context_line":"                                                                subnet_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_10e31034","line":463,"updated":"2014-08-19 13:54:43.000000000","message":"\u0027subnets\u0027, subnet)[\u0027id\u0027]","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"739cc7d588c99757de40ef199e78be83e77a485f","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        for subnet in router[\u0027subnet\u0027]:"},{"line_number":462,"context_line":"            subnet_id \u003d _get_resource_by_name(client,"},{"line_number":463,"context_line":"                                              \u0027subnet\u0027, router[\u0027subnet\u0027])[\u0027id\u0027]"},{"line_number":464,"context_line":"            # connect routers to their subnets"},{"line_number":465,"context_line":"            client.networks.add_router_interface_with_subnet_id(router_id,"},{"line_number":466,"context_line":"                                                                subnet_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_16e30834","line":463,"in_reply_to":"1abeadc6_10e31034","updated":"2014-08-19 14:23:26.000000000","message":"Done","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c39d20191b3b83f9455bf06e5ca73e3faeba2bac","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            if router[\u0027gateway\u0027]:"},{"line_number":468,"context_line":"                if CONF.network.public_network_id:"},{"line_number":469,"context_line":"                    ext_net \u003d CONF.network.public_network_id"},{"line_number":470,"context_line":"                    client.networks._update_router("},{"line_number":471,"context_line":"                        router_id,"},{"line_number":472,"context_line":"                        external_gateway_info\u003dext_net)"},{"line_number":473,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_b9a3204e","line":470,"updated":"2014-08-19 16:07:16.000000000","message":"Missing parameter \"set_enable_snat\"","commit_id":"fc5b5cb2556261d62dc7c9ecfb9c68c0b4b70064"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"0e6b805773ea21007691d80038a7eb7d59c04c65","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            client.networks.create_subnet(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":564,"context_line":"                                          cidr\u003dsubnet[\u0027range\u0027],"},{"line_number":565,"context_line":"                                          name\u003dsubnet[\u0027name\u0027],"},{"line_number":566,"context_line":"                                          ip_version\u003dsubnet[\u0027ip_version\u0027])"},{"line_number":567,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":568,"context_line":"            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":569,"context_line":"            if not is_overlapping_cidr:"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a890539_dc8f0222","line":566,"updated":"2014-11-11 21:27:45.000000000","message":"http://logs.openstack.org/69/100169/34/experimental/check-grenade-dsvm-neutron/b60be7e/logs/javelin.txt.gz#_2014-11-11_16_33_10_502","commit_id":"7ba0bfca0815650044b6e54f425dd1220b165b1a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"44c493e01b581d2e2999c86802e257080c0aa5b8","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            client.networks.create_subnet(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":564,"context_line":"                                          cidr\u003dsubnet[\u0027range\u0027],"},{"line_number":565,"context_line":"                                          name\u003dsubnet[\u0027name\u0027],"},{"line_number":566,"context_line":"                                          ip_version\u003dsubnet[\u0027ip_version\u0027])"},{"line_number":567,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":568,"context_line":"            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":569,"context_line":"            if not is_overlapping_cidr:"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a890539_ce801a49","line":566,"in_reply_to":"5a890539_dc8f0222","updated":"2014-11-12 09:59:35.000000000","message":"Done","commit_id":"7ba0bfca0815650044b6e54f425dd1220b165b1a"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"eaf010389c41a7ca5cafc62238f1692b123c7e34","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        if namespace is None:"},{"line_number":227,"context_line":"            ping_cmd \u003d \"ping -c1 \" + ip_addr"},{"line_number":228,"context_line":"        else:"},{"line_number":229,"context_line":"            ping_cmd \u003d \"sudo ip netns exec %s ping -c1 %s\" % (namespace,"},{"line_number":230,"context_line":"                                                              ip_addr)"},{"line_number":231,"context_line":"        for current in range(count):"},{"line_number":232,"context_line":"            return_code \u003d os.system(ping_cmd)"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a890539_62b57730","line":229,"updated":"2014-11-12 12:08:19.000000000","message":"do we still have sudo privs at this point?","commit_id":"7a2348bca6ee20e82144033e2da1305427f156c7"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d96a383da444620834ef74170eeb3228d58362d8","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        if namespace is None:"},{"line_number":227,"context_line":"            ping_cmd \u003d \"ping -c1 \" + ip_addr"},{"line_number":228,"context_line":"        else:"},{"line_number":229,"context_line":"            ping_cmd \u003d \"sudo ip netns exec %s ping -c1 %s\" % (namespace,"},{"line_number":230,"context_line":"                                                              ip_addr)"},{"line_number":231,"context_line":"        for current in range(count):"},{"line_number":232,"context_line":"            return_code \u003d os.system(ping_cmd)"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a890539_02cbd353","line":229,"in_reply_to":"5a890539_62b57730","updated":"2014-11-12 12:18:11.000000000","message":"It works on gate so I guess we do.","commit_id":"7a2348bca6ee20e82144033e2da1305427f156c7"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"eaf010389c41a7ca5cafc62238f1692b123c7e34","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                return \"qrouter-%s\" % router_id"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"def _get_resource_by_name(client, resource, name):"},{"line_number":527,"context_line":"    get_resources \u003d getattr(client, \u0027list_%s\u0027 % resource)"},{"line_number":528,"context_line":"    if get_resources is None:"},{"line_number":529,"context_line":"        raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a890539_825fc3e4","line":526,"updated":"2014-11-12 12:08:19.000000000","message":"Is the expectation that we\u0027re going to use this with non network resources as well?","commit_id":"7a2348bca6ee20e82144033e2da1305427f156c7"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d96a383da444620834ef74170eeb3228d58362d8","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                return \"qrouter-%s\" % router_id"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"def _get_resource_by_name(client, resource, name):"},{"line_number":527,"context_line":"    get_resources \u003d getattr(client, \u0027list_%s\u0027 % resource)"},{"line_number":528,"context_line":"    if get_resources is None:"},{"line_number":529,"context_line":"        raise AttributeError(\"client doesn\u0027t have method list_%s\" % resource)"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a890539_62d737ee","line":526,"in_reply_to":"5a890539_825fc3e4","updated":"2014-11-12 12:18:11.000000000","message":"I was thinking about that or writing new functions dedicated to network resources calling this function. Also this applies for non-network resources.\ne.g.\n\n def _get_network_by_name(client, name):\n     return _get_resource_by_name(client.networks, \u0027networks\u0027, name)","commit_id":"7a2348bca6ee20e82144033e2da1305427f156c7"}],"tempest/cmd/resources.yaml":[{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"f3b178afd7a2620c651955ea4a0bc6ed97afce11","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    gateway: true"},{"line_number":62,"context_line":"    subnet:"},{"line_number":63,"context_line":"      - house1"},{"line_number":64,"context_line":"      - castle1"},{"line_number":65,"context_line":"servers:"},{"line_number":66,"context_line":"  - name: peltast"},{"line_number":67,"context_line":"    owner: javelin"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7ac7a964_dc55531e","line":64,"updated":"2014-08-14 22:36:44.000000000","message":"These should reference subnet1 + subnet2, or the subnet names need updating to house1 + castle2?","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"6fd924dac091e1cca101f760bdc3f8ef64a2eb2c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    gateway: true"},{"line_number":62,"context_line":"    subnet:"},{"line_number":63,"context_line":"      - house1"},{"line_number":64,"context_line":"      - castle1"},{"line_number":65,"context_line":"servers:"},{"line_number":66,"context_line":"  - name: peltast"},{"line_number":67,"context_line":"    owner: javelin"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"1abeadc6_1df40e86","line":64,"in_reply_to":"7ac7a964_dc55531e","updated":"2014-08-19 11:30:38.000000000","message":"you\u0027re right, I have to fix it to use subnet1 + subnet2:\n\n$ neutron router-interface-add router SUBNET_UUID\n\nSource: http://docs.openstack.org/admin-guide-cloud/content/l3_workflow.html","commit_id":"b6bff3b5feaac01888d579d2525c514ef9d0a13b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2263694a800b60e96650904e8c3fcfa3898f0564","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    range: 192.168.1.0/24"},{"line_number":56,"context_line":"    network: world2"},{"line_number":57,"context_line":"    owner: javelin"},{"line_number":58,"context_line":"router:"},{"line_number":59,"context_line":"  - name: connector"},{"line_number":60,"context_line":"    owner: javelin"},{"line_number":61,"context_line":"    gateway: true"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"1abeadc6_2d4b5788","line":58,"updated":"2014-08-19 13:38:47.000000000","message":"routers","commit_id":"bdf3955338d88033b9c9057fb1cd6330b6eac94a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c39d20191b3b83f9455bf06e5ca73e3faeba2bac","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    range: 192.168.1.0/24"},{"line_number":56,"context_line":"    network: world2"},{"line_number":57,"context_line":"    owner: javelin"},{"line_number":58,"context_line":"router:"},{"line_number":59,"context_line":"  - name: connector"},{"line_number":60,"context_line":"    owner: javelin"},{"line_number":61,"context_line":"    gateway: true"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1abeadc6_f9683823","line":58,"updated":"2014-08-19 16:07:16.000000000","message":"routers","commit_id":"fc5b5cb2556261d62dc7c9ecfb9c68c0b4b70064"}],"tempest/services/network/json/network_client.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c39d20191b3b83f9455bf06e5ca73e3faeba2bac","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        body \u003d json.loads(body)"},{"line_number":84,"context_line":"        return resp, body"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def create_subnet(self, name, network, cidr, gateway\u003dNone, **kwargs):"},{"line_number":87,"context_line":"        post_body \u003d {\u0027subnet\u0027: kwargs}"},{"line_number":88,"context_line":"        post_body[\u0027subnet\u0027][\u0027name\u0027] \u003d name"},{"line_number":89,"context_line":"        post_body[\u0027subnet\u0027][\u0027network_id\u0027] \u003d network"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_797d08e7","line":86,"updated":"2014-08-19 16:07:16.000000000","message":"gateway should be removed because None means --no-gateway","commit_id":"fc5b5cb2556261d62dc7c9ecfb9c68c0b4b70064"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c39d20191b3b83f9455bf06e5ca73e3faeba2bac","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        post_body[\u0027subnet\u0027][\u0027network_id\u0027] \u003d network"},{"line_number":90,"context_line":"        post_body[\u0027subnet\u0027][\u0027cidr\u0027] \u003d cidr"},{"line_number":91,"context_line":"        post_body[\u0027subnet\u0027][\u0027ip_version\u0027] \u003d \u00274\u0027"},{"line_number":92,"context_line":"        post_body[\u0027subnet\u0027][\u0027gateway_ip\u0027] \u003d gateway"},{"line_number":93,"context_line":"        body \u003d json.dumps(post_body)"},{"line_number":94,"context_line":"        uri \u003d \u0027%s/subnets\u0027 % (self.uri_prefix)"},{"line_number":95,"context_line":"        resp, body \u003d self.post(uri, body)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_b987a0d6","line":92,"updated":"2014-08-19 16:07:16.000000000","message":"this should be removed","commit_id":"fc5b5cb2556261d62dc7c9ecfb9c68c0b4b70064"}]}
