zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python 运维CMD交互控制台 [应用]

Python应用运维 cmd 交互 控制台
2023-09-14 09:13:22 时间

通过使用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