如何连接 netmiko 和 django 应用程序
How to connect netmiko and django application
由于 netmiko 指定应该有设备类型、IP 地址、用户名和密码,所以我制作了一个名为设备的模型,我想做的是当我单击在 [=42= 中创建的每个设备时] 它应该使用四个凭证执行 netmiko,例如所选或单击的特定设备的设备类型、IP 地址、用户名和密码,它应该允许我键入一个可以通过按下按钮执行的命令
你能帮我看看代码吗
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
路径('execute/',connection_manage,名称='execute_device'),
需要首先设置
当我点击这个时,它应该让我能够手动输入所有细节并按下执行
手动输入所有字段并执行
这是网站的视图,但无论我输入什么,它仍然会连接到 cisco_ios
输出
需要第二次设置
当我单击每个字段按钮时,它应该弹出一个模式,该模式当前正在处理所有填充的字段,当我键入并执行它时,它应该 运行 用于指定的设备
这行不通:
device['ip'] = 'DESKTOP-CT4RSIT'
这需要是:
device['host'] = fqdn.domain.com
或
device['ip'] = 1.2.3.4 # The IP address of the device
由于 netmiko 指定应该有设备类型、IP 地址、用户名和密码,所以我制作了一个名为设备的模型,我想做的是当我单击在 [=42= 中创建的每个设备时] 它应该使用四个凭证执行 netmiko,例如所选或单击的特定设备的设备类型、IP 地址、用户名和密码,它应该允许我键入一个可以通过按下按钮执行的命令
你能帮我看看代码吗
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 路径('execute/',connection_manage,名称='execute_device'),
需要首先设置
当我点击这个时,它应该让我能够手动输入所有细节并按下执行
手动输入所有字段并执行
这是网站的视图,但无论我输入什么,它仍然会连接到 cisco_ios
输出
需要第二次设置 当我单击每个字段按钮时,它应该弹出一个模式,该模式当前正在处理所有填充的字段,当我键入并执行它时,它应该 运行 用于指定的设备
这行不通:
device['ip'] = 'DESKTOP-CT4RSIT'
这需要是:
device['host'] = fqdn.domain.com
或
device['ip'] = 1.2.3.4 # The IP address of the device