Func 常用模块及 API
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所示。
在所有模块中,CommandModule 模块最常用,可以在目标被控主机执行任意命令。笔者建议使用 API 方式对应用场景的逻辑进行封装,将权限放到一个预先定制好的方框中,实现收敛操作。下面对 Func 常用的模块一一进行讲解。
选择目标主机
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"
常用模块详解
-
执行命令模块
(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") -
文件拷贝模块
(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") -
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) -
磁盘信息模块
(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") -
拷贝远程文件模块
(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/") -
iptables 管理模块
(1) 功能
IPtablesModule 实现远程主机 iptables 配置。
(2) 命令行模式
# func "SN2013-08-022" call iptables.port drop_to 53192.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") -
系统硬件信息模块
(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() -
系统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") -
系统进程管理模块
(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") -
系统服务管理模块
(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") -
系统内核参数管理模块
(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"