返回介绍

11.2 Func 常用模块及 API

发布于 2024-01-29 22:54:22 字数 5723 浏览 0 评论 0 收藏 0

Func提供了非常丰富的功能模块,包括CommandModule(执行命令)、CopyFileModule(拷贝文件)、CpuModule(CPU信息)、DiskModule(磁盘信息)、FileTrackerModule(文件跟踪)、IPtablesModule(iptables管理)、MountModule(Mount挂载)、NagiosServerModule(Nagios管理)、NetworkTest(网络测试)、ProcessModule(进程管理)、SysctlModule(sysctl管理)、SNMPModule(SNMP信息),等等,更多模块介绍见官网模块介绍:https://fedorahosted.org/func/wiki/ModulesList。命令行调用模块格式:

func<目标主机>call<module_name(模块名)><method_name(方法名)><module_args(模块参数)>

模块命令行执行结果都以Python的元组字符串返回(API以字典形式返回),这对后续进行结果集的解析工作非常有利,例如,远程运行“df-m”命令的运行结果如图11-2所示。

图11-2 返回主机内存使用信息

在所有模块中,CommandModule模块最常用,可以在目标被控主机执行任意命令。笔者建议使用API方式对应用场景的逻辑进行封装,将权限放到一个预先定制好的方框中,实现收敛操作。下面对Func常用的模块一一进行讲解。

11.2.1 选择目标主机

Func选择目标主机操作对象支持“*”与“?”方式匹配,其中“*”代表任意多个字符,“?”代表单个任意字符,例如:

# func "SN2013-*-02?" call command run "uptime"

“SN2013-*-02?”在本文环境中将匹配到SN2013-08-021、SN2013-08-022两台主机,可以根据实际应用场景随意组合。例如,我们定义的多台Web业务服务器主机名分别为:web1、web2、web3、…、webn.webapp.com,要查看所有Web应用的uptime信息可以运行:

# func "web*.webapp.com" call command run "uptime"

多个目标主机名使用分号分隔,如:

# func "web.example.org;mailserver.example.org;db.example.org" call command run "df -m"

11.2.2 常用模块详解

1.执行命令模块

(1)功能

CommandModule实现Linux远程命令调用执行。

(2)命令行模式

# func "*" call command run "ulimit -a"
# func "SN2013-08-022" call command run "free -m"

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print client.command.run("free -m")

2.文件拷贝模块

(1)功能

CopyFileModule实现主控端向目标主机拷贝文件,类似于scp的功能。

(2)命令行模式

# func "SN2013-08-022" copyfile -f /etc/sysctl.conf --remotepath /etc/sysctl.conf

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
client.local.copyfile.send("/etc/sysctl.conf","/tmp/sysctl.conf")

3.CPU信息模块

(1)功能

CpuModule获取远程主机CPU信息,支持按时间(秒)采样平均值,如下面示例中的参数“10”。

(2)命令行模式

# func "SN2013-08-022" call cpu usage
# func "SN2013-08-022" call cpu usage 10

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print client.cpu.usage(10)

4.磁盘信息模块

(1)功能

DiskModule实现获取远程主机的磁盘分区信息,参数为分区标签,如/data分区。

(2)命令行模式

# func "SN2013-08-022" call disk usage
# func "SN2013-08-022" call disk usage /data

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print  client.disk.usage("/dev/sda3")

5.拷贝远程文件模块

(1)功能

GetFileModule实现拉取远程Linux主机指定文件到主控端目录,不支持命令行模式。

(2)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
client.local.getfile.get("/etc/sysctl.conf","/tmp/")

6.iptables管理模块

(1)功能

IPtablesModule实现远程主机iptables配置。

(2)命令行模式

# func "SN2013-08-022" call iptables.port drop_to 53 192.168.0.0/24 udp src
# func "SN2013-08-022" call iptables drop_from 192.168.0.10

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
client.iptables.port.drop_to(8080, "192.168.0.10", "tcp", "dst")

7.系统硬件信息模块

(1)功能

HardwareModule返回远程主机系统硬件信息。

(2)命令行模式

# func "SN2013-08-022" call hardware info
# func "SN2013-08-022" call hardware hal_info

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print client.hardware.info(with_devices=True)
print client.hardware.hal_info

8.系统Mount管理模块

(1)功能

MountModule实现远程主机Linux系统挂载、卸载分区管理。

(2)命令行模式

# func "SN2013-08-022" call mount list
# func "SN2013-08-022" call mount mount /dev/sda3 /data
# func "SN2013-08-022" call mount umount "/data"

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print client.mount.list
print client.mount.umount("/data")
print client.mount.mount("/dev/sda3","/data")

9.系统进程管理模块

(1)功能

ProcessModule实现远程Linux主机进程管理。

(2)命令行模式

# func "SN2013-08-022" call process info "aux"
# func "SN2013-08-022" call process pkill nginx -9
# func "SN2013-08-022" call process kill nginx SIGHUP

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print client.process.info("aux")
print client.process.pkill("nginx", "-9")
print client.process.kill("nginx", "SIGHUP")

10.系统服务管理模块

(1)功能

ServiceModule实现远程Linux主机系统服务管理。

(2)命令行模式

# func "SN2013-08-022" call service start nginx

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print client.service.start("nginx")

11.系统内核参数管理模块

(1)功能

SysctlModule实现远程Linux主机系统内核参数管理。

(2)命令行模式

# func "SN2013-08-022" call sysctl list
# func "SN2013-08-022" call sysctl get net.nf_conntrack_max
# func "SN2013-08-022" call sysctl set net.nf_conntrack_max 15449

(3)API模式

import func.overlord.client as func
client = func.Client("SN2013-08-022")
print  client.sysctl.list
print  client.sysctl.get('net.ipv4.icmp_echo_ignore_broadcasts')
print  client.sysctl.set('net.ipv4.tcp_syncookies', 1)

func命令功能参数举例:

1)查看所有主机uptime,开启5个线程异步运行,超时时间为3秒,命令如下:

# func -t 3 "*" call --forks="5" --async command run "/usr/bin/uptime"

2)格式化输出结果,默认格式为Python的元组,分别添加--jsion或--xml来输出JSON及XML格式,命令如下:

# func -t 3 "*" call --forks="5" --json --async command run "/usr/bin/uptime"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文