вернуть все данные из цикла - PullRequest
0 голосов
/ 13 мая 2019

У меня есть код, который входит в устройства.Я могу распечатать информацию с устройств в цикле просто отлично.Но я могу только вернуть «не печатать» данные с последнего устройства в списке.Как я могу вернуть все данные со всех устройств в цикле?

From flask import Flask, jsonify, request

импорт netmiko из netmiko.ssh_autodetect импорт SSHDetect из netmiko.ssh_exception import NetMikoTimeoutException время импорта

'app = Flask ( name )

@app.route ('/ firewall', Methods = ['GET', 'POST', 'DELETE'])

def firewall ():

# Authentication
headers = request.headers
auth = headers.get("xxxxx")
if auth == 'xxxx':

    data = request.get_json(force=True)
    fw_a = data["DeviceAddressList"]
    src_a = data['SourceAddressList']
    src_p = data['SourcePortList']
    dst_a = data['DestinationAddressList']
    dst_p = data['DestinationPortList']
    policy = data["PolicyAllow"]
    p_col = data['Protocol']
    p_show = data['show']
    p_push = data['push']
    config = data['config']

    # Juniper Normalize the data for command line interface
    juniper_command = '"({})"'.format('|'.join(src_a + src_p + dst_a + dst_p))

    username = "xxxx"
    password = "Pxxxx"


    try:
        ip_list = fw_a
        for ip in ip_list:
            #print(ip)
            device = {"device_type": "autodetect", "username": username, "host": ip, "password": password}
            guesser = SSHDetect(**device)
            best_match = guesser.autodetect()
            print(best_match)
            if "None" in str(best_match):
                continue
            #else:
            if "true" in str(p_show) and "juniper_junos" in str(best_match):
                device["device_type"] = best_match
                connection = netmiko.ConnectHandler(**device,)
                connection.find_prompt(delay_factor=2)
                time.sleep(1)
                connection.enable()
                resp = connection.send_command(
                    'show configuration | display xml | match ' + str(juniper_command), delay_factor=2)
                print(ip + '\n' + best_match + resp)


            if "true" in str(p_push) and "juniper_junos" in str(best_match):
                device["device_type"] = best_match
                connection = netmiko.ConnectHandler(**device)
                connection.find_prompt(delay_factor=2)
                time.sleep(1)
                connection.enable()
                push_resp = connection.send_command(config, delay_factor=2)
                connection.disconnect()
                print(push_resp)

        return ip + '\n' + best_match + resp

    except NetMikoTimeoutException:
        return "This Network Device is not reachable"
else:

return jsonify ({"message": "ERROR: Unauthorized"}), 401

Blockquote

1 Ответ

0 голосов
/ 15 мая 2019

Пример кода: переберите ips, получите значение, которое вы хотите вернуть для каждого ip, и вставьте его в dict. Вернуть диктант вызывающей функции 'firewall'

def firewall():
  result = dict()
  for ip in ip_list:
    push_resp = dummy_get_push_resp()
    result[ip] = push_resp
  return result 
...