Пока пользователей у вас немного, запомнить их логины и Ip-адреса – довольно просто. По мере разрастания базы пользователей это задание становится сложнее, соответственно возникает вероятность дублирования данных. Чтобы этого избежать, необходимо перед добавлением пользователей выполнить проверку введенных данных с теми, что находятся в базе данных.
Итак, скрипт:
#!/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 адрес занят"
Вот, что мы добавляем:
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. Запускаем скрипт.
Запускаем скрипт и вводим данные.
Если бы совпал только логин, мы бы увидели всего одно сообщение.
Если совпадений не обнаружено, скрипт продолжит свою работу.
Евгений Рудченко специально для Asp24




