链条传动

砥砺前行,不忘初心!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

非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\n", ""]}

返回的两种格式都可以被绝大部分语言解析,方便后续处理。

 

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自动化运维技术与最佳实践》整理

posted on 2016-08-18 11:26  链条君  阅读(437)  评论(0编辑  收藏  举报