非Python API接口支持
Func通过非Python API实现远程调用,目的是为第三方工具提供调用及返回接口。Func使用func-transmit命令来实现,支持YAML、JSON格式,实现了跨应用平台、语言、工具等,比如通过java、C生成JSON格式的接口定义,通过func-transmit命令来进行调用,使用上非常简单,扩展性也非常强。
定义一个command模块的远程执行,分别采用YAML、JSON格式进行定义
【run.yml】
clients: '*' #目标主机 async: False #是否同步 nforks: 1 #启用线程数 module: command #模块名称 method: run #模块方法名 parameters: '/bin/echo Hello World' #参数
【run.json】
{ 'clients': '*', 'async': 'False', 'nforks': 1, 'module': 'command', 'method': 'run', 'parameters': '/bin/echo Hello World', }
通过func-transmit命令调用不同接口配置,将返回不同的格式串
func-transmit --yaml < run.yaml #结果: --- test: - 0 - | Hello World - '' func-transmit --json < run.json #结果: {"test": [0, "Hello World ", ""]}
返回的两种格式都可以被绝大部分语言解析,方便后续处理。
Func的Facts支持
Facts是一个非常有用的组件,其功能类似于Saltstack的grains、Ansible的Facts,实现获取远程主机的系统信息,以便在对目标主机操作时作为条件进行过滤,产生差异。Func的Facts支持通过API来扩展用户自己的属性。Facts由两部分组成:模块(module)、方法(method),可以通过list_fact_modules、list_fact_methods方法来查看当前支持的模块与方法清单。
例:
func '*' call fact list_fact_modules #结果: {'wx': ['hardware', 'fact_module']} func '*' call fact list_fact_methods #结果: {'wx': ['hardware.cpu_model', 'kernel', 'cpumodel', 'hardware.kernel_version', 'cpuvendor', 'hardware.run_level', 'hardware.cpu_vendor', 'hardware.os_name', 'runlevel', 'os']} #func '*' call fact call_fact 'os' #调用os方法,查看主机操作系统信息
Fact支持and与or作为条件表达式连接操作符
and表达式:--filter
语法:
--filter ‘关键词 操作符 值’ --filter ‘值 in 关键词’
例:
func '*' call --filter 'kernel>=2.6,CentOS in os' command run 'uptime' #所有满足内核版本大于等于2.6,并且操作系统包含CentOS的目标主机运行uptime命令
or表达式:--filteror
语法:
--filteror ‘关键词 操作符 值’ --filteror ‘值 in 关键词’
例:
func '*' call --filteror 'kernel>=2.6,runlevel=5' command run 'df -h' #所有满足内核版本大于等于2.6,或者运行级别等于5的目标主机运行df -h命令
参考资料:
根据刘天斯《Python自动化运维技术与最佳实践》整理