Ansible之API(1)
Ansible API
案例1:简单的API示例,为了增加可视性,可以将结果进行json美化输出
#!/usr/bin/env python # coding=utf-8 import ansible.runner import json runner = ansible.runner.Runner( module_name='ping', # 模块名称 module_args='', # 模块参数 pattern='35_db', # 主机组 forks=10 # 并发量 ) datastructure = runner.run() data = json.dumps(datastructure,indent=4) print data #python ansible_api.py
2.复杂的API
#!/usr/bin/python import ansible.runner import sys # construct the ansible runner and execute on all hosts results = ansible.runner.Runner( pattern='35_db', forks=10, module_name='command', module_args='/usr/bin/uptime', ).run() if results is None: print "No hosts found" sys.exit(1) print "UP ***********" for (hostname, result) in results['contacted'].items(): if not 'failed' in result: print "%s >>> %s" % (hostname, result['stdout']) print "FAILED *******" for (hostname, result) in results['contacted'].items(): if 'failed' in result: print "%s >>> %s" % (hostname, result['msg']) print "DOWN *********" for (hostname, result) in results['dark'].items(): print "%s >>> %s" % (hostname, result)
Ansible模块
官网文档:docs.ansible.com/ansible/modules_by_category.html
根据官方的分类,将模块按照功能分类为:
All Modules # 模块总列表 Cloud Modules # 云模块 Clustering Modules # 集群模块 Commands Modules # 命令模块 Database Modules # 数据库模块 Files Modules # 文件模块 Inventory Modules # 资产模块 Messaging Modules # 消息模块 Monitoring Modules # 监控模块 Network Modules # 网络模块 Notification Modules # 通知模块 Packaging Modules # 包管理模块 Source Control Modules # 源码控制模块 System Modules # 系统模块 Utilities Modules # 单元模块 Web Infrastructure Modules # web设施模块 Windows Modules # window模块
常用模块列表
这里从官方分类的模块里选择了一些工作中检查用到的模块进行解释。
ping # 测试主机的连通性
file # 用于配置文件属性 yum # 用于管理软件包 cron # 配置计划任务 copy/fetch # 复制文件到远程主机/复制远程主机文件到本地 command # 在远程主机上执行命令 shell/raw # 类似于command模块,支持管道与通配符(最常用) user/group # 配置用户/用户组 service # 用于管理服务 ping # 检测远程主机是否存活 setup # 远程主机基本信息 mount # 配置挂载点 script # 脚本复制拷贝相关(最常用) get_url # 下载模块
1、ping模块
功能:测试主机是否连通,不涉及任何参数
[ansible@lyjl_ansible scripts]$ ansible 59_gm_tool -m ping zjdfw-gm_tool-3-10.92.3.184 | success >> { "changed": false, "ping": "pong" }
2、file模块
功能:主要用于远程主机上文件相关的操作
参数:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group:定义文件/目录的属组 mode:定义文件/目录的权限 owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径 recurse:递归的设置文件的属性,只对目录有效 src:要被链接的源文件的路径,只应用于state=link的情况 dest:被链接到的路径,只应用于state=link的情况 state directory:如果目录不存在,创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件
示例:
# 创建目录 ansible all -m file -a "path=/root/20150701 state=directory" # 创建文件 ansible all -m file -a "path=/root/20150701/test.txt state=touch" # 删除文件 ansible all -m file -a "path=/root/20150701/test.txt state=absebt" # 创建软链接 ansible all -m file -a "src=/etc/passwd desk=/root/ansible/passwd state=link"
3、setup模块
功能:主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数
# 官方的示例:
# Display facts from all hosts and store them indexed by I( hostname) at C( /tmp/facts) .
ansible all -m setup --tree /tmp/facts # 将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)
# Display only facts regarding memory found by ansible on all hosts and output them.
ansible all - m setup - a ' filter=ansible_*_mb' # 可以根据正则匹配过滤出所需的信息
# Display only facts returned by facter.
ansible all - m setup - a ' filter=facter_*'
# Display only facts about certain interfaces.
ansible all - m setup - a ' filter=ansible_eth[ 0- 2] '
4、copy/fetch模块
功能:实现管理主机和远程主机之间的文件拷贝