通过使用Python
内置的JSON模块,配合循环分支语句实现的模仿数据库增删改查的这么一个小工具,如下代码我定义了一个默认表,该表结构中HostList
用来存储主机的UUID
号以及账号密码信息,而HostGroup
组则用于存储组名称以及组内成员。
之所以会写这么一个案例,是想让自己熟练使用Python
中的JSON模块,对文本进行灵活的操作,从而锻炼自己的开发水平,这个案例的实际应用并不明朗,只能用作练手,在实际开发中使用SQLite数据库实现起来异常简单。
我的规划是这样的,首先定义AdminDataBase()
类,此类中定义各种针对数据库的增删改查操作,数据库文件名可以传入构造,这里就暂且命名为database.json
吧。
生成交互Shell环境: 首先需要生成交互式的Shell环境,以此来让用户可以输入命令,实现不同的功能,这里就把完整环境提前拿出来,后期直接使用,不再修改了.
实现初始化数据库: 通过定义构造传入数据库名称,然后直接调用InitDatabase(self)
实现初始化数据表结构.
数据库默认生成database.json
,内容如下:
{
"HostList": [
["1000", "127.0.0.1", "username", "password", "22"]
],
"HostGroup": [{
"DefaultGroup": ["1000"]
}]
}
输出主机/主机组列表: 主机列表的数据非常简单,直接调用ShowHostList
方法即可得到全部主机列表,这里不再多说.
输出主机组相比于主机列表稍微复杂一些,这里我实现了两个方法,使用ShowAllGroup
方法可输出所有的主机组和组内主机数,而使用ShowGroup
则可以输出当前数据库中所有的主机组有哪些。
实现操作主机记录: 增加与修改主机的实现稍微复杂一些,但相比于删除来说又显得简单,增加主机调用AddHost
方法.
- 增加主机命令: AddHost --uuid=1001 --address=192.168.1.1 --username=lyshark --password=123123 --port=22
如上是增加主机,如果我们需要修改特定的主机数据,则可直接调用ModifyHost
方法,该方法通过一个UUID号,完成对主机记录的修改措施,在修改前应该先判断是否存在该序号,从而再决定修改.
- 修改主机命令:
ModifyHost --uuid=1000 --address=192.168.1.2 --username=lyshark.com --password=123455 --port=3366
相比于修改主机记录,删除记录则变得异常复杂,原因是主机的删除必须要首先将主机组中的组内序号移除,在移除主机序号的基础上,在对特定主机进行移除,所以难度要比只删除主机记录复杂.
- 移除主机命令:
DeleteHost --uuid=1001
实现操作主机组: 主机组的操作包括两部分,第一是通过调用AddHostGroup()
向数据库增加一个组,另一个则是调用DeleteHostGroup()
来删除一个主机组,增加删除主机组时也应该考虑好是否存在UUID序号的问题。
如果需要增加一个主机组,可以执行AddHostGroup --group_name=MyLyshark
增加一个MyLyshark
的主机组,默认会放入一个1000
主机用户,因为JSON规范,必须保证存在一个节点,不得不增加一个。
当需要删除主机组时,可执行DeleteHostGroup --group_name=test
来删除test组。
给主机组增加/删除主机: 这一部分算是最复杂的部分了,首先我们需要指定一个主机组,然后在指定一个主机的UUID号,我们通过将UUID号增加到特定的组内,来完成对主机的归类操作,增加时可调用AddHostGroupOnUUID
方法,删除调用DeleteHostGroupOnUUID
实现。
实现组内Ping测试: 这部分内容是最有价值的,通过用户传入的一个组名称,循环输出该组内所有的主机数据,并实现Ping检测操作。
例如,当我们需要对MyLyshark
组内的所有主机进行测试时,可执行以下命令实现操作。
- Ping测试命令:
PingGroup --group=MyLyshark