def _run_netdevice(self, netdevice_ids, netdevice_cmd, netdevice_config,
                       use_textfsm):
        """
        Perform the netdevice execution
        :param netdevice_ids:
        :param netdevice_cmd:
        :param net_device_config:
        :param use_textfsm:
        :param kwargs:
        :return: json of status object
        """

        log = logging.getLogger(__name__)

        result = {}
        rc = True
        for device_id in netdevice_ids.split(','):

            # find the access information
            device_info = self.opts.get(device_id.strip(), None)
            if not device_info:
                msg = u"Unable to find section for '{}'".format(device_id)
                result[device_id] = {"status": 'failure', "reason": msg}
                rc = False

                log.warning(msg)
                continue

            device_commit = str_to_bool(device_info.pop('use_commit',
                                                        'False'))  # pop
            result[device_id] = execute(device_info, netdevice_cmd,
                                        netdevice_config, device_commit,
                                        use_textfsm)

        return rc, result
Example #2
0
def selftest_function(opts):
    """
    Run through all the defined devices and attempt to connect. The results are returned in a dictionary
    """
    options = opts.get("fn_netdevice", {})

    names = options.get("selftest", None)
    if not names:
        return { "state": "unimplemented"}

    results = {"state": "success"}
    for device in names.split(","):
        try:
            section = device.strip()
            settings = opts.get(section, None)
            if not settings:
                results[section] = {"status": "failure",
                                    "reason": u"section '{}' not found".format(section)
                                   }
                results["state"] = "failure"
            else:
                settings.pop('use_commit', None)  # remove parameters not needed for connection
                result = execute(settings, None, None, False, False)
                results[section] = result
                if result["status"] == "failure":
                    results["state"] = "failure"

        except Exception as err:
            results[section] = {"status": "failure",
                                "reason": str(err)
                               }
            results["state"] = "failure"

    return results
def test_success():

    my_connection = connection.copy()

    result = execute(my_connection, "ip address", None, False, False)

    assert not result.get('reason')
    assert result['status'] == 'success'
    assert result['send_result'].find('inet') != -1
def test_bad_password():

    my_connection = connection.copy()
    my_connection['password'] = ''

    result = execute(my_connection, None, None, False, False)

    assert result.get('reason')
    assert result['reason'].find('Authentication failure') != -1
    assert result['status'] == 'failure'