简体   繁体   中英

How to connect netmiko and django application

As netmiko specifies there should be a device type, IP Address, username and a password so I made a model named devices and what I am trying to do is when I click on each device created in a table it should execute netmiko with the four credentials such as Device type, IP Address, Username and password for the specific device selected or clicked and it should allow me to type a command which can be executed by a press of button

can you please help me with the code

Model.py
class Device(models.Model):
    CISCO1 = 1
    CISCO2 = 2
    CISCO3 = 3
    CISCO4 = 4
    DEVICE_TYPES = (
        (CISCO1, 'cisco_ios'),
        (CISCO2, 'cisco_nxos_ssh'),
        (CISCO3, 'cisco_s300'),
        (CISCO4, 'cisco_tp_tcce'),
    )
    device_name = models.CharField(max_length=50)
    publication_date = models.DateField(null=True)
    IP_address = models.CharField(max_length=50)
    username = models.CharField(max_length=30)
    password = models.CharField(max_length=30)
    device_type = models.PositiveSmallIntegerField(choices=DEVICE_TYPES)
    timestamp = models.DateField(auto_now_add=True, auto_now=False)

    def __str__(self):
        return self.device_name
View.py

This is the connection code but I am confused how to get data from the Model (Device) and pass it here or when I select a device from the view it should get the credential to this method

def connection_manage(request):
    if request.method == "POST":
        form = CommandForm(request.POST)
        if form.is_valid():
            from netmiko import ConnectHandler
            device = {}
            device['device_type'] = 'cisco_ios'
            device['ip'] = 'DESKTOP-CT4RSIT'
            device['username'] = ''
            device['password'] = ''
            cmd = request.POST.get('command', '')
            conn = ConnectHandler(**device)
            output = conn.send_command(cmd)
            return render(request, 'connect.html', {'form': form, 'output': output})
    else:
        form = CommandForm()
        return render(request, 'connect.html', {'form': form})
form.py

class CommandForm(BSModalForm):
    command = forms.CharField(label='Command to execute')
    class Meta:
        model = Device
        exclude = ['timestamp', 'publication_date', 'device_type']
connect.html

{% load static %}
<!doctype html>

<head>
    <title>Mannai Co.</title>
    <link href="{% static 'assets/css/bootstrap.min.css' %}" rel="stylesheet">
    <link rel="stylesheet" href="{% static 'assets/css/login.css' %}">
</head>

<body>
    <div class="wrapper fadeInDown">

        <div id="formContent">

            <div class="fadeIn first">
                <br>
                <img src="{% static 'assets/img/manni-png.png' %}" id="icon" alt="User Icon">
            </div>
            <h3 class="fadeIn second">Netminko APP</h3>
            <p>Run command:</p>
            <form method="POST">
                {% csrf_token %}
                {{form}}
                <br>
                <input type="submit" value="Run command!" class="fadeIn fourth" />
            </form>
            {% if request.POST %}
            <p>Command output:</p>
            <pre>{{ output }}</pre>
            {% endif %}

        </div>
    </div>
    <script src="{% static 'assets/js/bootstrap.min.js' %}"></script>
    <script src="{% static 'assets/js/jquery.min.js' %}"></script>

</body>

</html>

urs.py path('execute/',connection_manage, name='execute_device'),

First Setup needed when i click on this one it should make me able to enter all details manually and press execute乙

enter all fields manually and execute this is the view from the website but whatever I type it still going to connect to cisco_ios xxx

output赞

The second Setup needed when I click on the each filed button it should pop a modal which is currently working with all fields populated and when I type and command and execute it should run for the specified device

桌子

跑步

This won't work:

device['ip'] = 'DESKTOP-CT4RSIT'

This either needs to be:

device['host'] = fqdn.domain.com

or

device['ip'] = 1.2.3.4      # The IP address of the device

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM