)]}'
{"neutron_tempest_plugin/scenario/test_connectivity.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e37a10c28d98ce13711c05c0221cbc606e5f3113","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        (CONF.neutron_plugin_options.advanced_image_ref or"},{"line_number":295,"context_line":"         CONF.neutron_plugin_options.default_image_is_advanced),"},{"line_number":296,"context_line":"        \"Advanced image is required to run this test.\")"},{"line_number":297,"context_line":"    @testtools.skipUnless(CONF.network.public_network_id,"},{"line_number":298,"context_line":"                          \u0027The public_network_id option must be specified.\u0027)"},{"line_number":299,"context_line":"    @decorators.idempotent_id(\u002714fd12a8-c0ab-48bf-b81c-978172a8e634\u0027)"},{"line_number":300,"context_line":"    def test_vrrp_vip_failover(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_690fc82b","line":297,"updated":"2020-02-13 15:18:04.000000000","message":"The test should skip if the following conditions are not met:\n\n- \u003e 1 computes\n- DifferentHostFilter is enabled","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"8a1651d9e6dfaaacb77755c7279290e111a4756f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        (CONF.neutron_plugin_options.advanced_image_ref or"},{"line_number":295,"context_line":"         CONF.neutron_plugin_options.default_image_is_advanced),"},{"line_number":296,"context_line":"        \"Advanced image is required to run this test.\")"},{"line_number":297,"context_line":"    @testtools.skipUnless(CONF.network.public_network_id,"},{"line_number":298,"context_line":"                          \u0027The public_network_id option must be specified.\u0027)"},{"line_number":299,"context_line":"    @decorators.idempotent_id(\u002714fd12a8-c0ab-48bf-b81c-978172a8e634\u0027)"},{"line_number":300,"context_line":"    def test_vrrp_vip_failover(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6fc76599","line":297,"in_reply_to":"3fa7e38b_690fc82b","updated":"2020-02-20 10:49:03.000000000","message":"I think we can still try to run the test if these conditions are not met. We should in any case verify that VMs are not running on same host after VMs creation. So I added this validation after VM creation and test will skip in case VMs are running on same host.","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"64701e1427c891594ae3755cbbec7c9b536168b3","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                CONF.validation.image_ssh_user,"},{"line_number":332,"context_line":"                pkey\u003dself.keypair[\u0027private_key\u0027])"},{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_a96aa07e","line":334,"range":{"start_line":334,"start_character":27,"end_line":334,"end_character":50},"updated":"2020-02-13 15:26:42.000000000","message":"\u0027ip route show default\u0027 should do the same thing, might still need the head -1 in case there are \u003e1","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"8a1651d9e6dfaaacb77755c7279290e111a4756f","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                CONF.validation.image_ssh_user,"},{"line_number":332,"context_line":"                pkey\u003dself.keypair[\u0027private_key\u0027])"},{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_cfb77922","line":334,"range":{"start_line":334,"start_character":27,"end_line":334,"end_character":50},"in_reply_to":"3fa7e38b_a96aa07e","updated":"2020-02-20 10:49:03.000000000","message":"done","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e37a10c28d98ce13711c05c0221cbc606e5f3113","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"},{"line_number":338,"context_line":"            self._prepare_server(ports[vm][\u0027client\u0027], interface, vip_ip)"},{"line_number":339,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6e14ae99","line":336,"updated":"2020-02-13 15:18:04.000000000","message":"Does the advanced image available in Neutron CI include keepalived?","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"a96903df245eb6a79b3b87497d40a33a84087294","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"},{"line_number":338,"context_line":"            self._prepare_server(ports[vm][\u0027client\u0027], interface, vip_ip)"},{"line_number":339,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e4567d5d","line":336,"in_reply_to":"3fa7e38b_6e14ae99","updated":"2020-02-13 16:30:34.000000000","message":"This test is being skipped because keepalived is not in the advanced image\n\ncontroller | {0} neutron_tempest_plugin.scenario.test_connectivity.NetworkConnectivityTest.test_vrrp_vip_failover ... SKIPPED: keepalived is not available on server vm1","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"957be505f7b90a04835d8dae31db9b76d2056212","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"},{"line_number":338,"context_line":"            self._prepare_server(ports[vm][\u0027client\u0027], interface, vip_ip)"},{"line_number":339,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_ffb366ea","line":336,"in_reply_to":"3fa7e38b_9fc6f268","updated":"2020-02-13 16:59:46.000000000","message":"Instead of installing keepalived at runtime, it would be best if it could be installed when the image is built. Can we explore that option? It would be really nice to have this test running in upstream CI.","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"c783fc39e6923a9a10d622168d601cb83923e6c7","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"},{"line_number":338,"context_line":"            self._prepare_server(ports[vm][\u0027client\u0027], interface, vip_ip)"},{"line_number":339,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9fc6f268","line":336,"in_reply_to":"3fa7e38b_e4567d5d","updated":"2020-02-13 16:56:55.000000000","message":"I thought that in downstream we will install keepalived into custom_image by using infrared \"--images-packages keepalived\", like we are doing with other required packages.\n\nI tested with rhel image and with this line before the code that skips:\nssh_client.exec_command(\"sudo yum install keepalived -y\")\n\nI can install keepalived into the image during the test as above but as upstream uses not only rhel-based images need additional support for \u0027apt install\u0027.\n\nDo we need to run this test in upstream gates? It is a long test.","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"8a1651d9e6dfaaacb77755c7279290e111a4756f","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            interface \u003d ports[vm][\u0027client\u0027].exec_command("},{"line_number":334,"context_line":"                \"/usr/sbin/ip route | grep default | head -1 | \""},{"line_number":335,"context_line":"                \"cut -d \u0027 \u0027 -f 5\").rstrip()"},{"line_number":336,"context_line":"            self._check_keepalived_installed_on_server("},{"line_number":337,"context_line":"                ports[vm][\u0027client\u0027], vm)"},{"line_number":338,"context_line":"            self._prepare_server(ports[vm][\u0027client\u0027], interface, vip_ip)"},{"line_number":339,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0ff111e0","line":336,"in_reply_to":"3fa7e38b_ffb366ea","updated":"2020-02-20 10:49:03.000000000","message":"I added a code that will install keepalived using yum or apt during the test. This will cover default upstream(ubuntu) and downstream(rhel) cases. As for now only this single test requires keepalived so seems to me not necessary to have it installed for all tests.","commit_id":"63d7714c60e9036b508ec541988ae1e4f2e04cd9"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"ba643ca860d05dcd70478efddc1f73634d7c5350","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            sshclient, dvr_router_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027],"},{"line_number":253,"context_line":"            ping_count\u003d10)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def _config_keepalived(self, interface, vip_ip):"},{"line_number":256,"context_line":"        return \"\"\"vrrp_instance VIP_1 {"},{"line_number":257,"context_line":"state MASTER"},{"line_number":258,"context_line":"interface %s"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_01b822c6","line":255,"updated":"2020-02-25 17:13:00.000000000","message":"this one could be a @staticmethod","commit_id":"e318286dac53f1764faea8ac24109766d632c923"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"24cac659f78bce6d6dff49c92c6afb7e925dad98","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            sshclient, dvr_router_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027],"},{"line_number":253,"context_line":"            ping_count\u003d10)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def _config_keepalived(self, interface, vip_ip):"},{"line_number":256,"context_line":"        return \"\"\"vrrp_instance VIP_1 {"},{"line_number":257,"context_line":"state MASTER"},{"line_number":258,"context_line":"interface %s"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_82c2c132","line":255,"in_reply_to":"1fa4df85_01b822c6","updated":"2020-02-26 14:29:14.000000000","message":"indeed, decided to put it outside the class at all","commit_id":"e318286dac53f1764faea8ac24109766d632c923"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"ba643ca860d05dcd70478efddc1f73634d7c5350","unresolved":false,"context_lines":[{"line_number":270,"context_line":"\"\"\" % (interface, vip_ip)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _get_vm_host(self, server_id):"},{"line_number":273,"context_line":"        server_details \u003d self.os_admin.servers_client.show_server(server_id)"},{"line_number":274,"context_line":"        return server_details[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def _install_keepalived_on_server(self, ssh_client, server_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_a13b4e36","line":273,"updated":"2020-02-25 17:13:00.000000000","message":"wouldn\u0027t this one work wit self.client.show_server?","commit_id":"e318286dac53f1764faea8ac24109766d632c923"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"24cac659f78bce6d6dff49c92c6afb7e925dad98","unresolved":false,"context_lines":[{"line_number":270,"context_line":"\"\"\" % (interface, vip_ip)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _get_vm_host(self, server_id):"},{"line_number":273,"context_line":"        server_details \u003d self.os_admin.servers_client.show_server(server_id)"},{"line_number":274,"context_line":"        return server_details[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def _install_keepalived_on_server(self, ssh_client, server_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_c2cd195e","line":273,"in_reply_to":"1fa4df85_a13b4e36","updated":"2020-02-26 14:29:14.000000000","message":"OS-EXT-SRV-ATTR:host property is accessible only for admin user therefore self.client.show_server won\u0027t work as needed here.","commit_id":"e318286dac53f1764faea8ac24109766d632c923"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"5717ba3b377c46770159e38b8056a74f9b2b4eab","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        cls.create_loginable_secgroup_rule(secgroup_id\u003dcls.secgroup[\u0027id\u0027])"},{"line_number":70,"context_line":"        cls.create_pingable_secgroup_rule(secgroup_id\u003dcls.secgroup[\u0027id\u0027])"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _create_servers(self, port_1, port_2):"},{"line_number":73,"context_line":"        params \u003d {"},{"line_number":74,"context_line":"            \u0027flavor_ref\u0027: CONF.compute.flavor_ref,"},{"line_number":75,"context_line":"            \u0027image_ref\u0027: CONF.compute.image_ref,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_e0aef6e5","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":46},"updated":"2020-02-27 23:06:55.000000000","message":"Wouldn\u0027t this be easier if you had a _create_server that took as arguments a port and a name?  You would have to move setting the array to null, and the outside wait, to outside the function but it would be much streamlined, since the logic seems the same.  The scheduler_hints bit later at lines 84-87 could be conditional on len(self.vms) \u003e 1.","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"7549aa9f415f60a4ccda64679f3a50afe89bc2fb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        cls.create_loginable_secgroup_rule(secgroup_id\u003dcls.secgroup[\u0027id\u0027])"},{"line_number":70,"context_line":"        cls.create_pingable_secgroup_rule(secgroup_id\u003dcls.secgroup[\u0027id\u0027])"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _create_servers(self, port_1, port_2):"},{"line_number":73,"context_line":"        params \u003d {"},{"line_number":74,"context_line":"            \u0027flavor_ref\u0027: CONF.compute.flavor_ref,"},{"line_number":75,"context_line":"            \u0027image_ref\u0027: CONF.compute.image_ref,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_a81f4f59","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":46},"in_reply_to":"1fa4df85_e0aef6e5","updated":"2020-03-03 11:21:05.000000000","message":"Fixed to a _create_server that takes port and name as parameters and also scheduler_hints. It seems to me more flexible for example in case we\u0027ll need 3 VMs in some test we can specify specific scheduler_hints for each.\nAs we actually left almost nothing to inherit from this class I also decided to create a separate class for vrrp.","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"5717ba3b377c46770159e38b8056a74f9b2b4eab","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027key_name\u0027: self.keypair[\u0027name\u0027]"},{"line_number":77,"context_line":"        }"},{"line_number":78,"context_line":"        self.vms \u003d []"},{"line_number":79,"context_line":"        self.vms.append("},{"line_number":80,"context_line":"            self.create_server("},{"line_number":81,"context_line":"                networks\u003d[{\u0027port\u0027: port_1[\u0027id\u0027]}], name\u003d\u0027vm1\u0027, **params))"},{"line_number":82,"context_line":"        self.vms[-1][\u0027server\u0027][\u0027name\u0027] \u003d \u0027vm1\u0027"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if (CONF.compute.min_compute_nodes \u003e 1 and"},{"line_number":85,"context_line":"                compute.is_scheduler_filter_enabled(\"DifferentHostFilter\")):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_604d2671","line":82,"range":{"start_line":79,"start_character":0,"end_line":82,"end_character":46},"updated":"2020-02-27 23:06:55.000000000","message":"Typically for legibility I would do something like:\n\n    vm1 \u003d self.create_server(networks\u003d[{\u0027port\u0027: port_1[\u0027id\u0027]}], name\u003d\u0027vm1\u0027, **params))\n    vm1[\u0027server\u0027][\u0027name\u0027] \u003d \u0027vm1\u0027\n    self.vms \u003d [vm1]\n\nThat way there is zero ambiguity what you are talking about.","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"7549aa9f415f60a4ccda64679f3a50afe89bc2fb","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027key_name\u0027: self.keypair[\u0027name\u0027]"},{"line_number":77,"context_line":"        }"},{"line_number":78,"context_line":"        self.vms \u003d []"},{"line_number":79,"context_line":"        self.vms.append("},{"line_number":80,"context_line":"            self.create_server("},{"line_number":81,"context_line":"                networks\u003d[{\u0027port\u0027: port_1[\u0027id\u0027]}], name\u003d\u0027vm1\u0027, **params))"},{"line_number":82,"context_line":"        self.vms[-1][\u0027server\u0027][\u0027name\u0027] \u003d \u0027vm1\u0027"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if (CONF.compute.min_compute_nodes \u003e 1 and"},{"line_number":85,"context_line":"                compute.is_scheduler_filter_enabled(\"DifferentHostFilter\")):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_c8596b35","line":82,"range":{"start_line":79,"start_character":0,"end_line":82,"end_character":46},"in_reply_to":"1fa4df85_604d2671","updated":"2020-03-03 11:21:05.000000000","message":"done as suggested","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"5717ba3b377c46770159e38b8056a74f9b2b4eab","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return server_details[\u0027server\u0027][\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _install_keepalived_on_server(self, ssh_client, server_id):"},{"line_number":278,"context_line":"        ssh_client.exec_command(\"sudo yum install keepalived -y || \""},{"line_number":279,"context_line":"                                \"sudo apt install keepalived -y || true\")"},{"line_number":280,"context_line":"        try:"},{"line_number":281,"context_line":"            ssh_client.execute_script(\u0027sudo which keepalived\u0027)"},{"line_number":282,"context_line":"        except exceptions.SSHScriptFailed:"},{"line_number":283,"context_line":"            raise self.skipException("},{"line_number":284,"context_line":"                \"keepalived is not available on server %s\" % (server_id))"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _prepare_server(self, ssh_client, interface, vip_ip):"},{"line_number":287,"context_line":"        config_text \u003d get_keepalived_config(interface, vip_ip)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_20708ea5","line":284,"range":{"start_line":278,"start_character":0,"end_line":284,"end_character":73},"updated":"2020-02-27 23:06:55.000000000","message":"I like the way you did this.","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"5717ba3b377c46770159e38b8056a74f9b2b4eab","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            network\u003dself.network)"},{"line_number":337,"context_line":"        vip_ip \u003d ports[\u0027vip\u0027][\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        for vm in [\u0027vm1\u0027, \u0027vm2\u0027]:"},{"line_number":340,"context_line":"            ports[vm][\u0027port\u0027] \u003d self.create_port("},{"line_number":341,"context_line":"                network\u003dself.network, security_groups\u003d[self.secgroup[\u0027id\u0027]],"},{"line_number":342,"context_line":"                allowed_address_pairs\u003d[{\"ip_address\": vip_ip}])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_207e4e6b","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":32},"updated":"2020-02-27 23:06:55.000000000","message":"One good part about making _create_servers just take a port and a name above is that you can define \"vms \u003d [\u0027vm1\u0027, \u0027vm2\u0027]\" and then you can reuse it all over.","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"7549aa9f415f60a4ccda64679f3a50afe89bc2fb","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            network\u003dself.network)"},{"line_number":337,"context_line":"        vip_ip \u003d ports[\u0027vip\u0027][\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        for vm in [\u0027vm1\u0027, \u0027vm2\u0027]:"},{"line_number":340,"context_line":"            ports[vm][\u0027port\u0027] \u003d self.create_port("},{"line_number":341,"context_line":"                network\u003dself.network, security_groups\u003d[self.secgroup[\u0027id\u0027]],"},{"line_number":342,"context_line":"                allowed_address_pairs\u003d[{\"ip_address\": vip_ip}])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fa4df85_e877879f","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":32},"in_reply_to":"1fa4df85_207e4e6b","updated":"2020-03-03 11:21:05.000000000","message":"Done","commit_id":"21dc3e8c90181f679ef7d1751861e75ba693188a"}]}
