一、前言
二、MySQL创建数据库和表
2.1 创建数据库
2.2 创建存储服务器信息的表
2.3 安装Python的MySQL库
三、创建django项目接管MySQL
3.1创建项目和应用
3.2编辑settings.py
3.3 创建表
3.4 创建后台用户
3.5 把表添加到后台管理
3.6 启动web服务
三、Python脚本编写
四、 使用ansible调用Python脚本

一、前言
由于管理的服务器越来越多,服务器账号密码的管理,还有账号密码跟ansible的结合使用迫在眉睫。
由于ansible支持动态Inventory,支持从各种脚本中动态获取主机信息,只要脚本中输出的主机信息符合ansible格式要求即可。
现在打算把所有账号和密码存在MySQL数据库中,然后通过Python脚本来调用给ansible使用,达到只要保存一份账号密码全部通用的目的。
可以使用django来接管MySQL管理,通过web页面来管理服务器账号密码信息,当然也可以不使用django,直接在MySQL数据库管理。
如果不想使用django来管理的话,下面文章中第三节(创建django项目接管MySQL)可以直接跳过。

二、MySQL创建数据库和表
MySQL的安装我这里不详解,如果图方便直接用YUM安装就行。

#yum install mysql-server

2.1 创建数据库

Mysql>create database haibing

创建一个名为haibing名称的数据库,可根据自己需要取名。

2.2 创建存储服务器信息的表
这里要注意,如果想使用django来管理MySQL的话,这一步可以忽略,因为可以使用django自动创建MySQL表。

Mysql>CREATE TABLE `host` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `host` varchar(60) NOT NULL COMMENT '主机名',
  `port` int(11) NOT NULL COMMENT 'ssh端口',
  `manage_user` varchar(60) DEFAULT NULL COMMENT '平时用来管理的用户名',
  `manage_password` varchar(60) DEFAULT NULL COMMENT '管理用户的密码',
  `root_password` varchar(60) DEFAULT NULL COMMENT 'root账号密码',
  `other_user` varchar(60) DEFAULT NULL COMMENT '其它用户',
  `snmp` varchar(60) DEFAULT NULL COMMENT 'snmp团体密钥',
  `os` varchar(60) DEFAULT NULL COMMENT '操作系统版本',
  `ip` varchar(60) DEFAULT NULL COMMENT '服务器管理IP',
  `other_ip` varchar(60) DEFAULT NULL COMMENT '其它IP,多个IP以空格为开',
  `createtime` datetime(6) NOT NULL COMMENT '服务器创建时间',
  `tag` varchar(60) DEFAULT NULL COMMENT '备注',
  `groupname` varchar(60) DEFAULT NULL COMMENT '组名',
  `prod` tinyint(1) NOT NULL COMMENT '是否是生产服务器,是1,否0',
  `enabled` tinyint(1) NOT NULL COMMENT '是否启用状态,是1否0',
  `esxi` varchar(60) DEFAULT NULL COMMENT '宿主机IP',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.3 安装Python的MySQL库

#pip install PyMySQL

三、创建django项目接管MySQL
3.1创建项目和应用

#django-admin startproject haibing
#cd haibing
#python manage.py startapp cmdb

可根据自己需求修改项目和应用名称

3.2编辑settings.py
#vim haibing/settings.py

#允许所有主机访问
ALLOWED_HOSTS = ['*']

#加入APP名
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cmdb',
]

#数据库信息修改为MySQL
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'haibing',    #MySQL中数据库名
        'USER': 'root',         #MySQL用户名
        'PASSWORD': '',       #MySQL密码
        'HOST': '127.0.0.1',     #MySQL的IP地址
        'PORT': '3306',       #MySQL的端口
    }
}

由于Django用的还是MySQLdb,如果是Python3.X,会报错
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module
需要在站点的__init__.py文件中,添加如下代码:

import pymysql
pymysql.install_as_MySQLdb()

不知道最新版的Django有没有修复这个问题。

3.3 创建表
在cmdb文件夹中的 models.py添加以下内容

class Host(models.Model):
   id = models.AutoField(verbose_name='ID',primary_key=True)
   host = models.CharField(u'主机名',max_length=60,unique=True)
   port = models.IntegerField(u'端口号')
   manage_user = models.CharField(u'管理用户名',max_length=60,null=True)
   manage_password = models.CharField(u'管理用户名的密码',max_length=60,null=True)
   root_password = models.CharField(u'root密码',max_length=60,null=True)
   other_user = models.CharField(u'其它用户',max_length=60,null=True)
   snmp = models.CharField(u'snmp团体密钥',max_length=60,null=True)
   os = models.CharField(u'操作系统版本',max_length=60,null=True)
   ip = models.CharField(u'用来管理连接的IP',max_length=60,null=True)
   other_ip = models.CharField(u'其它IP',max_length=60,null=True)
   createtime = models.DateTimeField(u'机器开通时间',auto_now_add=True)
   tag = models.CharField(u'备注信息',max_length=60,null=True)
   groupname = models.CharField(u'组名',max_length=60,null=True)
   prod = models.BooleanField(u'是否是生产服务器',max_length=1)
   enabled = models.BooleanField(u'是否启用状态',max_length=1)
   esxi = models.CharField(u'虚拟机宿主机IP',max_length=60,null=True)
   class Meta:
     db_table = "host"
   def __str__(self):
     return self.host

用命令生成表单:
#python manage.py makemigrations

Migrations for 'cmdb':
  cmdb/migrations/0002_host.py
- Create model Host

#python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, cmdb, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying cmdb.0001_initial... OK
  Applying cmdb.0002_host... OK
  Applying sessions.0001_initial... OK

到数据库中查看生成的表信息:

mysql> use haibing;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------------------+
| Tables_in_haibing          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| host                       |
+----------------------------+
11 rows in set (0.00 sec)

其中表host是我们在models.py中创建的表,其它是django自动创建的表,主要是后台登录验证需要的一些表。

3.4 创建后台用户
创建一个用户名为root,密码为root12345的后台管理用户:

#python manage.py createsuperuser
Username (leave blank to use 'root'): root
Email address:
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
#至少要8个字符
Password:root12345
Password (again):root12345
Superuser created successfully.

3.5 把表添加到后台管理
……….

点击链接前往文库下载全文(全文包括全部内容以及完整代码):
https://max.book118.com/html/2019/0508/8001005102002022.shtm
(只需要使用游客身份扫码付款下载即可,不用注册没有其它任何手续)