python实现交换机巡检脚本(二)

admin 2023-11-5 408 11/5

简要说明:

根据之前的文章来看,我们已经能够实现使用python来通过ssh连接交换机,并发送命令来进行巡检了。

但是上回的学习中,我们只能发送一条巡检命令,这当然不是我想要的效果。

那么这次,我要学习看看怎么才能批量发送命令。根据官方的文档来看,我大致了解到有两种方法可以实现批量发送命令,并进行输出打印的方法,分别是send_config_from_file与send_config_set。

这二者基本没有什么区别,只是一个是通过txt文件来进行调用,也就是写个外置的字典,然后通过调用来实现批量命令的运行。

另外一个就是在python内写个命令字典,然后来进行调用。

接下来,我会根据我对官方文档的理解以及我实际测试时候的使用方法来进行讲解。

注意:由于本人也是个小白,都是根据网上的资料以及官网的文档来进行编写的,所以中间有什么说的不够严谨的地方,还请各位海涵。

那么接下来就进行正文部分

1.send_config_set的使用

send_config_set命令可以通过ssh通道来进行发送配置命令。

def send_config_set
(
self, config_commands: Union[str, Sequence[str], Iterator[str], TextIO, ForwardRef(None)] = None, *, exit_config_mode: bool = True, read_timeout: Optional[float] = None, delay_factor: Optional[float] = None, max_loops: Optional[int] = None, strip_prompt: bool = False, strip_command: bool = False, config_mode_command: Optional[str] = None, cmd_verify: bool = True, enter_config_mode: bool = True, error_pattern: str = '', terminator: str = '#', bypass_commands: Optional[str] = None) ‑> str

 

根据官方解释

config_commands 是一个包含所有配置命令的可迭代对象。这些命令将被一个接一个地执行。

自动退出/进入配置模式。

:param config_commands: 发送到设备的多个配置命令

:param exit_config_mode: 确定完成后是否退出配置模式

:param delay_factor:在 Netmiko 4.x 中已弃用。将在Netmiko 5中被淘汰。

:param max_loops:在 Netmiko 4.x 中已弃用。将在Netmiko 5中被淘汰。

:param strip_prompt: 决定是否剥离提示

:param strip_command: 决定是否剥离命令

:param read_timeout: 发送到 read_channel_timing 的绝对计时器。还调整 read_until_pattern 调用中的 read_timeout 。

:param config_mode_command: 进入配置模式的命令

:param cmd_verify: 是否验证 config_set 中每个命令的命令回显

:param Enter_config_mode: 发送配置命令之前是否进入配置模式

:param error_pattern: 用于检测输出中的配置错误的正则表达式模式。

:param terminator: 在某些情况下用作备用终止符的正则表达式模式。

:parambypass_commands:正则表达式模式,指示自动禁用 cmd_verify 的配置命令

 

这里其实我们不用看这么多

我们只需要关注config_commands:就可以

这里我们在导入了模块以及写好ssh连接的方法后,命名一个字典既可(ssh连接交换机的方法还不熟悉的可以点击这里

connfig = ["display ip interface brief","display clock"]

这里我们字典里包含两个命令,写好之后,我们需要调用这个字典,并且进行打印。

命令如下:

connfig = ["display ip interface brief","display clock"]

#这里h3cdemo1是我们在创建的ssh连接时候的命名
output = h3cdemo1.send_config_set(
config_commands=connfig,
)
print(output)

查看打印结果:

 

 

python实现交换机巡检脚本(二)

这里就可以看到,两条命令我们都已经进行了打印;微信公众号关注“听说爱情很美”

完整代码如下:

 

from netmiko import Netmiko
from netmiko import ConnectHandler 

h3cdemo1 = ConnectHandler(
    device_type="hp_comware",
    host="172.168.10.10",
    username="admin",
    password="admin",
    port=22,
)
connfig = ["display ip interface brief","display clock"]
output = h3cdemo1.send_config_set(
config_commands=connfig,

)
print(output)

 

2.send_config_from_file的使用

send_config_from_file可以从文件通过 SSH 通道发送配置命令。

文件被逐行处理,每个命令都通过 SSH 通道发送。

def send_config_from_file
(
self, config_file: Union[str, bytes, ForwardRef('PathLike[Any]')], **kwargs: Any) ‑> str

根据官方解释

**kwargs 被传递给 send_config_set 方法。

:param config_file: 发送到设备的配置文件路径

:param kwargs: 要发送到 send_config_set 方法的参数

 

这里也是一样,我们重点看config_file如何使用

为了后面代码的书写调用方便,我们将初始代码修改一下,改成下面这样

h3cdemo2 = {
    'device_type' : 'hp_comware',
    'host':'172.168.10.10',
    'username':'admin',
    'password':'admin',
    'port':22
}

h3cdemo2相当于我们创建了一个字典,包含了我们连接ssh以及后面调用命令所需要的参数和类型。我们调用ConnectHandler函数的时候,就可以使用**来进行传入,结合with语句就可以写出下面这种代码

with ConnectHandler(**h3cdemo2) as connect:
    # 这里config_file是固定的,不能自定义
    output = connect.send_config_from_file(config_file='.\1.txt') 
    print("这里是巡检的内容:",end='\n')
    print(output)

里面调用到的1.txt就是我们我们的配置命令文件。

这里文件内容必须为utf-8

我们查看调用结果

python实现交换机巡检脚本(二)

这是我txt的内容

python实现交换机巡检脚本(二)

完整代码如下

from netmiko import Netmiko
from netmiko import ConnectHandler 

h3cdemo2 = {
    'device_type' : 'hp_comware',
    'host':'172.168.10.10',
    'username':'admin',
    'password':'admin',
    'port':22
}

with ConnectHandler(**h3cdemo2) as connect:
    # 这里config_file是固定的,不能自定义
    output = connect.send_config_from_file(config_file='./gitdemo/h3cxunjian/demo/1.txt') 
    print("这里是巡检的内容:",end='\n')
    print(output)

是这里就是这次内容,这里还有个个人的公众号,可以关注一下,公众号比较杂,会不定期的分享一些有用的或者没用的东西给各位看官,“听说爱情很美”,欢迎大家关注。

- THE END -

admin

11月27日08:45

最后修改:2023年11月27日
3

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论