)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"adf831444fcfd842e375769ac942ae8349f1eefd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Omar Khalid \u003comkhalid@cisco.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-07 15:07:56 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Changes for scenario for VM-VM throughput L2/L3"},{"line_number":8,"context_line":"For now it supports iperf/TCP but plan is to support nuttcp by adding a new nuttcp class"},{"line_number":9,"context_line":"Once my other boot_hypervisor_test review is merged i will provide ability to control same/different host"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1aca2d91_0ee4df38","line":7,"updated":"2015-05-08 01:29:05.000000000","message":"Leave space between Subject and Description","commit_id":"3eb643a77c982571d7b959b1e1d6cbd40a3494e7"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"ca128c5af11f304783e5f7d669a36cf98586c7d2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Omar Khalid \u003comkhalid@cisco.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-07 15:07:56 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Changes for scenario for VM-VM throughput L2/L3"},{"line_number":8,"context_line":"For now it supports iperf/TCP but plan is to support nuttcp by adding a new nuttcp class"},{"line_number":9,"context_line":"Once my other boot_hypervisor_test review is merged i will provide ability to control same/different host"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3afb71cf_9e7f0366","line":7,"in_reply_to":"1aca2d91_0ee4df38","updated":"2015-06-08 08:57:22.000000000","message":"Done","commit_id":"3eb643a77c982571d7b959b1e1d6cbd40a3494e7"},{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"adf831444fcfd842e375769ac942ae8349f1eefd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Changes for scenario for VM-VM throughput L2/L3"},{"line_number":8,"context_line":"For now it supports iperf/TCP but plan is to support nuttcp by adding a new nuttcp class"},{"line_number":9,"context_line":"Once my other boot_hypervisor_test review is merged i will provide ability to control same/different host"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: If475e08ee7952b7025f859b92bf8d33e25f787de"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1aca2d91_6ec6b39b","line":9,"updated":"2015-05-08 01:29:05.000000000","message":"Which is that other boot_hypervisor_test patch?","commit_id":"3eb643a77c982571d7b959b1e1d6cbd40a3494e7"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"ca128c5af11f304783e5f7d669a36cf98586c7d2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Changes for scenario for VM-VM throughput L2/L3"},{"line_number":8,"context_line":"For now it supports iperf/TCP but plan is to support nuttcp by adding a new nuttcp class"},{"line_number":9,"context_line":"Once my other boot_hypervisor_test review is merged i will provide ability to control same/different host"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: If475e08ee7952b7025f859b92bf8d33e25f787de"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3afb71cf_9ef6e3f7","line":9,"in_reply_to":"1aca2d91_6ec6b39b","updated":"2015-06-08 08:57:22.000000000","message":"Description was irrelevant to the commit.\nNew description provided,","commit_id":"3eb643a77c982571d7b959b1e1d6cbd40a3494e7"}],"rally/benchmark/scenarios/vm/IperfInstance.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":31,"context_line":"               username, port, key_name, **kwargs):"},{"line_number":32,"context_line":"        \"\"\""},{"line_number":33,"context_line":"        Create an instance and install iperf on the instance"},{"line_number":34,"context_line":"        Start the server if the role is a server"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        Instance.create(self, self.role, image, flavor, net, use_floatingip,"},{"line_number":37,"context_line":"                        floating_network, username, port,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_8b5df2ee","line":34,"updated":"2015-03-18 21:30:29.000000000","message":"seems like it doesn\u0027t install iperf.","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def install_iperf(self, src_file, dst_file\u003d\"/tmp/iperf\"):"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        Upload the iperf binary to the VM and"},{"line_number":43,"context_line":"        start the server if the VM is a server"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        cmd \u003d \"sudo cat \u003e \" + dst_file"},{"line_number":46,"context_line":"        self.ssh_instance.run(cmd, stdin\u003dopen(src_file, \u0027rb+\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_6b999e78","line":43,"updated":"2015-03-18 21:30:29.000000000","message":"We shouldn\u0027t use precompiled binaries. \n\n\nIt should be installed by apt-get/yum/or make commands on image. \n\nActually in Rally we are going to use special context class that prapers images for benchmarking. Take a look at this patch: \n\n  https://review.openstack.org/#/c/141671/ (and rest chain)\n\nIn more details we are going to support only 2 modes: \n\n  - user uses already uploaded image in cloud with preinstalled benchmark tool (with special file ~/bench) that accept argument run() \n\n  - user don\u0027t have image, and use rally context that prepares it for benchmark scenario.","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                                     packet_size_opt,"},{"line_number":71,"context_line":"                                                     target_ip,"},{"line_number":72,"context_line":"                                                     str(duration))"},{"line_number":73,"context_line":"        code, out, err \u003d self.ssh_instance.execute(cmd)"},{"line_number":74,"context_line":"        if code:"},{"line_number":75,"context_line":"            raise RuntimeError(\"Iperf client command failed\")"},{"line_number":76,"context_line":"        iperf_op \u003d self._parse_iperf_output(out)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_8b7892f9","line":73,"updated":"2015-03-18 21:30:29.000000000","message":"why not \n\nhttps://github.com/stackforge/rally/blob/master/rally/benchmark/scenarios/vm/utils.py#L124-L138","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        iperf_op \u003d self._parse_iperf_output(out)"},{"line_number":77,"context_line":"        return iperf_op"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def dispose(self):"},{"line_number":80,"context_line":"        Instance.dispose(self)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _parse_iperf_output(self, input_str):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_8b5fb274","line":79,"updated":"2015-03-18 21:30:29.000000000","message":"This method is unclear for me.","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def dispose(self):"},{"line_number":80,"context_line":"        Instance.dispose(self)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _parse_iperf_output(self, input_str):"},{"line_number":83,"context_line":"        \u0027\u0027\u0027 function that parses i-perf output"},{"line_number":84,"context_line":"        Returns a 0 throughput on err"},{"line_number":85,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_37238806","line":82,"updated":"2015-03-18 21:30:29.000000000","message":"IPerf supports output in csv for such cases. \n\n  http://serverfault.com/questions/566737/iperf-csv-output-format\n\nSo we won\u0027t need to parse this by hand and case use standard lib CSV: \n  https://docs.python.org/2/library/csv.html","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                return {\u0027throughput\u0027:"},{"line_number":110,"context_line":"                        MULTIPLIERS[tcp_tokens[-1]] * float(tcp_tokens[-2])}"},{"line_number":111,"context_line":"            else:"},{"line_number":112,"context_line":"                print \u0027%s: Could not parse throughput line: %s\u0027 \\"},{"line_number":113,"context_line":"                    % (func_name, lines[6])"},{"line_number":114,"context_line":"        elif protocol \u003d\u003d \u0027UDP\u0027:"},{"line_number":115,"context_line":"            # Search for the last row containing the word \u0027Bytes\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_3779c82f","line":112,"updated":"2015-03-18 21:30:29.000000000","message":"Do not use print here. Nobody will see it. You should use:\n  LOG.debug","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            udp_tokens \u003d lines[mb_row].replace(\u0027/\u0027, \u0027 \u0027).split()"},{"line_number":119,"context_line":"            # Find the column ending with \"...Bytes\""},{"line_number":120,"context_line":"            mb_col \u003d [col for col, data in enumerate(udp_tokens) \\"},{"line_number":121,"context_line":"                if data.endswith(\u0027Bytes\u0027)]"},{"line_number":122,"context_line":"            if len(mb_col) \u003e 0 and len(udp_tokens) \u003e\u003d mb_col[0] + 9:"},{"line_number":123,"context_line":"                # Make a sublist starting after the column named \"MBytes\""},{"line_number":124,"context_line":"                stat_tokens \u003d udp_tokens[mb_col[0]+1:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_77a6e0ac","line":121,"updated":"2015-03-18 21:30:29.000000000","message":"do not use \\ you don\u0027t need to use it when you are in bracket \n\n  a \u003d  [\n\n  ]\n\n  is valid python code.","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                        \u0027jitter\u0027:float(stat_tokens[3]),"},{"line_number":132,"context_line":"                        \u0027lost\u0027:float(stat_tokens[7].strip(\u0027()%\u0027))}"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                print \u0027%s: Could not parse UDP test output: %s\u0027 \\"},{"line_number":135,"context_line":"                    % (func_name, lines)"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            print \u0027%s: Unhandled protocol %s\u0027 % (func_name, lines)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_ebd3ced2","line":134,"updated":"2015-03-18 21:30:29.000000000","message":"Do not use print here. Nobody will see it. You should use: \n\n  LOG.debug","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"}],"rally/benchmark/scenarios/vm/instance.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally.common import sshutils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class Instance(object):"},{"line_number":19,"context_line":"    \"\"\""},{"line_number":20,"context_line":"    Defines a VM instance"},{"line_number":21,"context_line":"    has a ssh instance with floating ip if needed"},{"line_number":22,"context_line":"    Functions to create and delete a VM and associated"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_90499f90","line":19,"updated":"2015-03-18 21:30:29.000000000","message":"It\u0027s not the typical pattern of how we are making scenarios.\n\n\nBaseically you should have \n\n\n  class IPerf(vm.utils.VMScenario):\n\n    @base.scenario(....)\n    def run(self, ...):\n       ...","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.net \u003d None"},{"line_number":32,"context_line":"        self.scenario_instance \u003d vm_instance"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setup_ssh(self, ssh_ip, port, ssh_user):"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        Function to setup SSH into an instance"},{"line_number":37,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_3058f356","line":34,"updated":"2015-03-18 21:30:29.000000000","message":"this function is already implemented in  https://github.com/stackforge/rally/blob/master/rally/benchmark/scenarios/vm/utils.py#L114","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            pkey\u003dself.scenario_instance.context[\"user\"][\"keypair\"][\"private\"])"},{"line_number":42,"context_line":"        self.scenario_instance.wait_for_ssh(self.ssh_instance)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create(self, vm_role, image, flavor, net, use_floatingip,"},{"line_number":45,"context_line":"               floating_network,"},{"line_number":46,"context_line":"               username, port, key_name, **kwargs):"},{"line_number":47,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_9017df53","line":44,"updated":"2015-03-18 21:30:29.000000000","message":"This is done as well already here:\n\nhttps://github.com/stackforge/rally/blob/master/rally/benchmark/scenarios/vm/utils.py#L68-L85","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        #Now setup ssh for all future uses one session for lifetime of instance"},{"line_number":65,"context_line":"        self.setup_ssh(self.ssh_ip, port, username)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def vm_create_and_associate_floating_ip(self, floating_network):"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        Given a external network create and asssociate floating ip"},{"line_number":70,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_371d4810","line":67,"updated":"2015-03-18 21:30:29.000000000","message":"Already done in vm/utils.py","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.fip \u003d self.scenario_instance._create_floating_ip(floating_network)"},{"line_number":72,"context_line":"        self.scenario_instance._associate_floating_ip(self.instance, self.fip)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def release_server_floating_ip(self):"},{"line_number":75,"context_line":"        \"\"\"Release a floating ip associated to a server."},{"line_number":76,"context_line":"        This method check that the given floating ip is associated with the"},{"line_number":77,"context_line":"        specified server and tries to dissociate it."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_b7d85854","line":74,"updated":"2015-03-18 21:30:29.000000000","message":"same","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                                                           self.fip)"},{"line_number":86,"context_line":"            self.scenario_instance._delete_floating_ip(self.fip)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def dispose(self):"},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        Delete a VM and its resources"},{"line_number":91,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_d7d94c57","line":88,"updated":"2015-03-18 21:30:29.000000000","message":"same","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"}],"rally/benchmark/scenarios/vm/vm_perf.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        LOG.info(\"Scenario: boot_runperf_delete Start\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            #######################################################"},{"line_number":86,"context_line":"            # Attach the VM NIC to either the fixed network provided"},{"line_number":87,"context_line":"            # or Rally created network"},{"line_number":88,"context_line":"            #######################################################"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_3a37ede4","line":85,"updated":"2015-03-18 21:30:29.000000000","message":"Such comments doesn\u0027t pass code style. \n\n# NOTE(ajay): Attach the VM NIC to either the fixed networks","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            #######################################################"},{"line_number":86,"context_line":"            # Attach the VM NIC to either the fixed network provided"},{"line_number":87,"context_line":"            # or Rally created network"},{"line_number":88,"context_line":"            #######################################################"},{"line_number":89,"context_line":"            nets \u003d self.clients(\"nova\").networks.list()"},{"line_number":90,"context_line":"            # check if fixed network was passed, if so pass its nic"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_7a440547","line":87,"updated":"2015-03-18 21:30:29.000000000","message":"This should be done and already is done in network context. SO just use it. \n\nhttps://github.com/stackforge/rally/blob/master/rally/benchmark/context/network.py","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d68db882d44cef8cbfed3f3dbead9ecc61e340ea","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                        self.network \u003d net[\"name\"]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            # Boot the server and client VM"},{"line_number":113,"context_line":"            self.server \u003d IperfInstance(self, \"server\")"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            self.server.create(image, flavor, self.network, use_floatingip,"},{"line_number":116,"context_line":"                               floating_network, username, port,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_7a89656e","line":113,"updated":"2015-03-18 21:30:29.000000000","message":"Just inherit this ckass from vm.utils.VMScenario there are already methods that covers all steps: \n\n  1) creating vm with fip and required sec groups\n  2)  waiting for ping\n  3) wating for ssh\n  4) executing commands in ssh \n  5) cleaning all resources","commit_id":"c3f4bc650a3d347a69f7730edf4552fcf35e409b"},{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"adf831444fcfd842e375769ac942ae8349f1eefd","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"import re"},{"line_number":18,"context_line":"import time"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rally import consts"},{"line_number":21,"context_line":"from rally import exceptions"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_6e4d933d","line":18,"updated":"2015-05-08 01:29:05.000000000","message":"Where are these being used?\n\nOther places too, unused variables.","commit_id":"3eb643a77c982571d7b959b1e1d6cbd40a3494e7"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"ca128c5af11f304783e5f7d669a36cf98586c7d2","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"import re"},{"line_number":18,"context_line":"import time"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rally import consts"},{"line_number":21,"context_line":"from rally import exceptions"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_1eb55330","line":18,"in_reply_to":"1aca2d91_6e4d933d","updated":"2015-06-08 08:57:22.000000000","message":"Done","commit_id":"3eb643a77c982571d7b959b1e1d6cbd40a3494e7"}],"rally/plugins/openstack/context/network/networks.py":[{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"40c74110cbea270089179b8df87d826e801f275c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    add_router\u003dTrue,"},{"line_number":76,"context_line":"                    subnets_num\u003d1,"},{"line_number":77,"context_line":"                    dns_nameservers\u003dself.config.get("},{"line_number":78,"context_line":"                        \"dns_nameservers\").split(\",\"))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"                self.context[\"tenants\"][tenant_id][\"networks\"].append(network)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_b6f2f3d0","line":78,"updated":"2015-08-19 13:26:48.000000000","message":"1) get is not needed here.\n\nSimply use\n\ndns_nameservers\u003dself.config[dns_nameservers].split(\",\")\n\nBecause line #53 will add this key if not specified in the input config.\n\n2) I believe you are not passing argument (dns_nameservers) rightly\nPlease refer https://github.com/openstack/rally/blob/master/rally/plugins/openstack/wrappers/network.py#L299-L300\nit is evident that you will have to pass dns_nameservers as part of **kwargs\n\nso make it something like\n\ndns_nameservers \u003d {\"dns_nameservers\": self.config[dns_nameservers].split(\",\")}\n\nnetwork \u003d net_wrapper.create_network(tenant_id, add_router\u003dTrue, subnets\u003d1,**dnsnameservers)","commit_id":"d1620812d1c80970cc7ea80c5d1e32b570506b93"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"6492efd7d80e3dd2a86f8fb45869d2f027a38c9b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    add_router\u003dTrue,"},{"line_number":76,"context_line":"                    subnets_num\u003d1,"},{"line_number":77,"context_line":"                    dns_nameservers\u003dself.config.get("},{"line_number":78,"context_line":"                        \"dns_nameservers\").split(\",\"))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"                self.context[\"tenants\"][tenant_id][\"networks\"].append(network)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_8733de13","line":78,"in_reply_to":"fa1b9901_b6f2f3d0","updated":"2015-08-19 22:19:07.000000000","message":"\u003c\u003cSimply use\ndns_nameservers\u003dself.config[dns_nameservers].split(\",\")\n\u003e\u003e\n\nok\n\n\n\u003c\u003c it is evident that you will have to pass dns_nameservers as part of **kwargs\u003e\u003e\n\nIf you looked at  function declaration of https://github.com/openstack/rally/blob/master/rally/plugins/openstack/wrappers/network.py#L299-L300 that you pointed to,  you will see only tenant_id is the fixed/mandatory parameter.\n\nadd_router, subnets_num are all the optional kwargs - like the dns_namservers that was added.\n\nSo calling the create_network the way I am calling it is correct and consistent with the current form of the code.\n\nI\u0027m pretty sure I passed it correctly as my VM got injected with the right DNS values of my network  (not default \"8.8.8.8\", \"8.8.4.4\" which wont work) and iperf installed successfully.","commit_id":"d1620812d1c80970cc7ea80c5d1e32b570506b93"}],"rally/plugins/openstack/context/vm/simple_tool_custom_image.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015: Cisco Inc"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_b77ca171","line":1,"updated":"2015-07-29 20:30:59.000000000","message":"Change copyright please","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015: Cisco Inc"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_8dab6389","line":1,"in_reply_to":"3a50d1a3_b77ca171","updated":"2015-08-18 08:53:46.000000000","message":"What would you like to me to change it to ?","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from rally.common import log as logging"},{"line_number":20,"context_line":"from rally.plugins.openstack.context.vm import custom_image"},{"line_number":21,"context_line":"from rally.plugins.openstack.scenarios.vm import utils as vm_utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_57df5d68","line":22,"updated":"2015-07-29 20:30:59.000000000","message":"Please delete redundant line.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from rally.common import log as logging"},{"line_number":20,"context_line":"from rally.plugins.openstack.context.vm import custom_image"},{"line_number":21,"context_line":"from rally.plugins.openstack.scenarios.vm import utils as vm_utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_4d96ab4d","line":22,"in_reply_to":"3a50d1a3_57df5d68","updated":"2015-08-18 08:53:46.000000000","message":"Done","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class SimpleToolImageGenerator(custom_image.BaseCustomImageGenerator):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(SimpleToolImageGenerator, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _customize_image(self, server, ip, user):"},{"line_number":34,"context_line":"        \"\"\"Simple installation"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_f778e990","line":31,"updated":"2015-07-29 20:30:59.000000000","message":"This is useless __init__ method. Please delete it.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class SimpleToolImageGenerator(custom_image.BaseCustomImageGenerator):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(SimpleToolImageGenerator, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _customize_image(self, server, ip, user):"},{"line_number":34,"context_line":"        \"\"\"Simple installation"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_2d749733","line":31,"in_reply_to":"3a50d1a3_f778e990","updated":"2015-08-18 08:53:46.000000000","message":"Done","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(SimpleToolImageGenerator, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _customize_image(self, server, ip, user):"},{"line_number":34,"context_line":"        \"\"\"Simple installation"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param server: nova.Server instance"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_f709c9dd","line":33,"updated":"2015-07-29 20:30:59.000000000","message":"Please look at examples of other contexts. you need to have setup() and cleanup() methods. I think this method need to be in utils. Also server parameter not used here.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(SimpleToolImageGenerator, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _customize_image(self, server, ip, user):"},{"line_number":34,"context_line":"        \"\"\"Simple installation"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param server: nova.Server instance"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_ad9e6754","line":33,"in_reply_to":"3a50d1a3_f709c9dd","updated":"2015-08-18 08:53:46.000000000","message":"Please read up on the base class mechanism.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        :param ip: dict with server IP details"},{"line_number":38,"context_line":"        :param user: user who started a VM instance. Used to extract keypair"},{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        vc \u003d vm_utils.VMScenario()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        k \u003d StringIO.StringIO(user[\"keypair\"][\"private\"])"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_77a05990","line":40,"updated":"2015-07-29 20:30:59.000000000","message":"Please delete here redundant lines.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        :param ip: dict with server IP details"},{"line_number":38,"context_line":"        :param user: user who started a VM instance. Used to extract keypair"},{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        vc \u003d vm_utils.VMScenario()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        k \u003d StringIO.StringIO(user[\"keypair\"][\"private\"])"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_0dae7385","line":40,"in_reply_to":"3a50d1a3_77a05990","updated":"2015-08-18 08:53:46.000000000","message":"Done","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        vc \u003d vm_utils.VMScenario()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        k \u003d StringIO.StringIO(user[\"keypair\"][\"private\"])"},{"line_number":44,"context_line":"        res \u003d vc._run_command(ip[\"ip\"], self.config[\"port\"],"},{"line_number":45,"context_line":"                              self.config[\"username\"],"},{"line_number":46,"context_line":"                              None,"},{"line_number":47,"context_line":"                              \"/bin/bash\","}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_171eb5ba","line":44,"updated":"2015-07-29 20:30:59.000000000","message":"ip[\"ip\"] - looks like ip not right name for dict","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        vc \u003d vm_utils.VMScenario()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        k \u003d StringIO.StringIO(user[\"keypair\"][\"private\"])"},{"line_number":44,"context_line":"        res \u003d vc._run_command(ip[\"ip\"], self.config[\"port\"],"},{"line_number":45,"context_line":"                              self.config[\"username\"],"},{"line_number":46,"context_line":"                              None,"},{"line_number":47,"context_line":"                              \"/bin/bash\","}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_4dcb0b54","line":44,"in_reply_to":"3a50d1a3_171eb5ba","updated":"2015-08-18 08:53:46.000000000","message":"Please read the base class.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                              \"/bin/bash\","},{"line_number":48,"context_line":"                              \"cat /etc/*-release\","},{"line_number":49,"context_line":"                              pkey\u003dk,"},{"line_number":50,"context_line":"                              is_file\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if \"Ubuntu\" in str(res):"},{"line_number":53,"context_line":"            cmd \u003d \"sudo apt-get install iperf -y\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_b78261fd","line":50,"updated":"2015-07-29 20:30:59.000000000","message":"Lines 44-50 could be written in 2-3 lines.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                              \"/bin/bash\","},{"line_number":48,"context_line":"                              \"cat /etc/*-release\","},{"line_number":49,"context_line":"                              pkey\u003dk,"},{"line_number":50,"context_line":"                              is_file\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if \"Ubuntu\" in str(res):"},{"line_number":53,"context_line":"            cmd \u003d \"sudo apt-get install iperf -y\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_ede21fd5","line":50,"in_reply_to":"3a50d1a3_b78261fd","updated":"2015-08-18 08:53:46.000000000","message":"Done","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"d77bdf328ae308f0bf5c00a177ea04f984f9ecb6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                              is_file\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if \"Ubuntu\" in str(res):"},{"line_number":53,"context_line":"            cmd \u003d \"sudo apt-get install iperf -y\""},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            cmd \u003d \"sudo yum install iperf\""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_37bdf1b0","line":53,"updated":"2015-07-29 20:30:59.000000000","message":"For running sudo we need admin credentials","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"c2483f18d6c60caed7559ea75da7ebf9ecd7fe73","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                              is_file\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if \"Ubuntu\" in str(res):"},{"line_number":53,"context_line":"            cmd \u003d \"sudo apt-get install iperf -y\""},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            cmd \u003d \"sudo yum install iperf\""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_4dd22b02","line":53,"in_reply_to":"3a50d1a3_37bdf1b0","updated":"2015-08-18 08:53:46.000000000","message":"No problem with Ubuntu cloud images.\nAnd user can configure whatever user they want to use in the json/yaml file.","commit_id":"4e0a55b3b62b77b4a5b8c398bbebde0b2fd5bf3a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"68d02caa92f24c89a4a0616907f122d596927328","unresolved":false,"context_lines":[{"line_number":27,"context_line":"@context.configure(name\u003d\"simple_tool_custom_image\", order\u003d500, hidden\u003dFalse)"},{"line_number":28,"context_line":"class SimpleToolImageGenerator(custom_image.BaseCustomImageGenerator):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _exec_cmd(self, ip, user, cmd):"},{"line_number":31,"context_line":"        \"\"\"Execute command on custom image VM"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        :param ip: dict with server IP details"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_24dca9e3","line":30,"updated":"2015-08-18 11:57:28.000000000","message":"We don\u0027t need this function here. It Just call vm_scenario._run_command","commit_id":"e673095981b65d40929d7f198f4bd7847d787c9e"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"e022e6f5516d36426f92560424658300e945f059","unresolved":false,"context_lines":[{"line_number":27,"context_line":"@context.configure(name\u003d\"simple_tool_custom_image\", order\u003d500, hidden\u003dFalse)"},{"line_number":28,"context_line":"class SimpleToolImageGenerator(custom_image.BaseCustomImageGenerator):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _exec_cmd(self, ip, user, cmd):"},{"line_number":31,"context_line":"        \"\"\"Execute command on custom image VM"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        :param ip: dict with server IP details"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_eabac822","line":30,"in_reply_to":"fa1b9901_24dca9e3","updated":"2015-08-19 09:43:18.000000000","message":"Done","commit_id":"e673095981b65d40929d7f198f4bd7847d787c9e"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"68d02caa92f24c89a4a0616907f122d596927328","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        cmd \u003d {\"interpreter\": \"/bin/bash\","},{"line_number":64,"context_line":"               \"script_inline\": install_cmd}"},{"line_number":65,"context_line":"        res \u003d self._exec_cmd(ip, user, cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_4400bd34","line":65,"updated":"2015-08-18 11:57:28.000000000","message":"Please look at other samples of contexts. You need to have setup() and cleanup() method.","commit_id":"e673095981b65d40929d7f198f4bd7847d787c9e"},{"author":{"_account_id":16215,"name":"Omar Khalid","email":"omkhalid@cisco.com","username":"omaratcisco"},"change_message_id":"e022e6f5516d36426f92560424658300e945f059","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        cmd \u003d {\"interpreter\": \"/bin/bash\","},{"line_number":64,"context_line":"               \"script_inline\": install_cmd}"},{"line_number":65,"context_line":"        res \u003d self._exec_cmd(ip, user, cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_8a5c6cee","line":65,"in_reply_to":"fa1b9901_4400bd34","updated":"2015-08-19 09:43:18.000000000","message":"I understand that the context need to have setup and cleanup() method.\n\nAs said in previous review, please see and understand the base that this class inherits from;  and OO inheritance concept.","commit_id":"e673095981b65d40929d7f198f4bd7847d787c9e"}]}
