Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to connect netmiko and django application #7

Open
Shafeenes opened this issue Jan 12, 2020 · 0 comments
Open

How to connect netmiko and django application #7

Shafeenes opened this issue Jan 12, 2020 · 0 comments

Comments

@Shafeenes
Copy link

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
i want to get what is written in the fields and post it in the connection method so it runs
but i dont know know 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
b

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
zzz

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

table

running

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant