Продолжаем работу над скриптом, который будет добавлять пользователей в Mikrotik RouteBoard RB493AH, Mikrotik RouterBoard 1100, Mikrotik RouterBoard 433AH и другие устройства Mikrotik Routerboard.
Пока пользователей у вас немного, запомнить их логины и Ip-адреса – довольно просто. По мере разрастания базы пользователей это задание становится сложнее, соответственно возникает вероятность дублирования данных. Чтобы этого избежать, необходимо перед добавлением пользователей в Mikrotik Routerboard выполнить проверку введенных данных с теми, что находятся в базе данных.
Итак, скрипт:
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import MySQLdb
from paramiko import SSHClient
from paramiko import AutoAddPolicy
print "asp24.com.ua"
while True:
login = raw_input("Введите имя пользователя: ")
password = raw_input("Введите пароль пользователя: ")
ipaddress = raw_input("Введите IP адрес пользователя: ")
speed = raw_input("Скорость пользователя: ")
db = MySQLdb.connect(user='user', passwd='1q2w3e', db='mymikrotik')
cur = db.cursor()
sql = ("SELECT login, ipaddress FROM users WHERE login = '%s' OR ipaddress='%s'") % (login, ipaddress) # Извлекаем данные о пользователях в базе данных
cur.execute(sql)
data = cur.fetchall()
cur.close()
if not data:
mtlogin = raw_input("Введите имя администратора mikrotik: ")
mtpassword = raw_input("Введите пароль администратора mikrotik: ")
mtipaddress = raw_input("Введите IP адрес mikrotik: ")
db = MySQLdb.connect(user='user', passwd='1q2w3e', db='mymikrotik')
cur = db.cursor()
sql = ("INSERT INTO users (login, password, ipaddress, speed, ipmikrotik) VALUES ('%s', '%s', '%s', '%s', '%s')" % (login, password, ipaddress, speed, mtipaddress))
cur.execute(sql)
cur.close()
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())
ssh.connect(mtipaddress, port=22, username=mtlogin, password=mtpassword)
cmd = "/ppp secret add name=%s password=%s service=any profile=default local=172.16.1.1 remote=%s" % (login, password, ipaddress)
ssh.exec_command(cmd)
ssh.close()
print "Пользователь %s добавлен" % (login)
if raw_input("Хотите продолжить? y/n: ")=="n":
break
else:
for sql_record in data:
sql_login = sql_record[0]
sql_ipaddress = sql_record[1]
if login == sql_login:
print "Логин занят"
if ipaddress == sql_ipaddress:
print "ip адрес занят"
Вот, что мы добавляем:
db = MySQLdb.connect(user='root', passwd='1q2w3e', db='mymikrotik')
cur = db.cursor()
sql = ("SELECT login, ipaddress FROM users WHERE login = '%s' OR ipaddress='%s'") % (login, ipaddress)
cur.execute(sql)
data = cur.fetchall()
cur.close()
Подключение к базе и создание курсора – мы уже знаем.
sql = ("SELECT login, ipaddress FROM users WHERE login = '%s' OR ipaddress='%s'") % (login, ipaddress) # (извлекаем данные о пользователях из базы данных)
В этом запросе мы извлекаем поля login и ipaddress из таблицы users, если они совпадают с введенными значениями. Результат помещаем в data = cur.fetchall()
Делаем проверку:
if not data: - если совпадений не было, то продолжаем вводить значения для добавления пользователей в mikrotik.
else: - иначе (то есть если совпадения были)
for sql_record in data: запускаем цикл, в котором будут созданы две переменные sql_login и sql_ipaddress.
sql_login = sql_record[0]
sql_ipaddress = sql_record[1]
Сравниваем эти переменные со значениями, которые мы вводили с клавиатуры. Выводим сообщения.
if login == sql_login:
print "Логин занят"
if ipaddress == sql_ipaddress:
print "ip адрес занят"

Рис.1. Запускаем скрипт.
Запускаем скрипт и вводим данные.

Рис.2. Логин и IP уже существуют.
Мы ввели все необходимые данные. Скрипт выполнил проверку на совпадение в базе данных и выдал результат, что и логин, и ip-адрес заняты.

Рис.3. Логин уже существует.
Если бы совпал только логин, мы бы увидели всего одно сообщение.

Рис.4. Совпадений не обнаружено.
Если совпадений не обнаружено, скрипт продолжит свою работу.
Евгений Рудченко специально для Asp24.
Читайте дальше Как при добавлении пользователя добавить в базу данных значения даты создания учетной записи и даты отключения
Отправить страницу на e-mail