关于 Ansible 系列其他文章的传送门
-
《 Ansible 介绍和基础操作 》 您当前所在位置
-
《 Ansible Playbook 以及 Roles 的简单使用方法 》
-
《 使用Ansible Playbook 通过 yum 部署 LNMP 环境 》
-
《 使用Ansible Roles 快速搭建 Nginx 代理后端的 LAMP 模型 》
-
《 使用Ansible Playbook 自动完成硬盘的分区、格式化、挂载 》

一、Ansible 是什么
在生产环境中,会有很多集群,比如 openstack 集群、ceph 集群、k8s 集群等等,集群中的主机数量从十几台到上百、上千台不等,当出现大量的发布、部署工作时,如果一台一台去修改,发布周期会非常长,而且这种又无聊又繁琐的工作老子早就烦的掀桌子不想干了, 而且这种大量重复的操作,一是没有效率,二是人工去做很容易出现错误。孔子曾经说过 “懒人使科技进步”(误),国外有个叫 Michael DeHaan 的 “懒人” 开发了 Ansible,他在项目中对 ansible 的介绍是:
Ansible 是一个极其简单的 IT 自动化系统。它处理配置管理,应用程序部署,云配置,临时任务执行和多节点编排 - 包括使用负载平衡器实现零停机滚动更新等微不足道的操作
Ansible 糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。 仅需在管理工作站上安装 ansible 程序,配置被管控主机的 IP 信息,被管控的主机无客户端,也就是说他可以代替人工,按照你之前设定好的方式,批量的执行某些操作,后在 2015 年被 RedHat 收购,收录在 epel 源中。
Ansible 特性有:
- 模块化:能调用特定的模块,来实现特定的功能;
- 基于 Python 开发:由 PyYAML 和 Jinja2 三个关键模块;
- 部署简单:不需要 agent 端;
- 幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
二、安装 Ansible
Ansible 收录在 epel 源中,所以先安装 epel 源, 随后安装 ansible
1 2 3
| yum install epel-release yum install ansible
|
安装后使用 rpm -ql ansible 查看程序文件:
- 主配置文件:
/etc/ansible/ansible.cfg
- 主机清单:
/etc/ansible/hosts
- 主程序:
ansible、ansible-playbook、ansible-doc
三、使用方法
基本语法:
1
| ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS -C -u USERNAME -c CONNECTION
|
查看 ansible 模块:
查看指定模块的帮助信息:
常用模块
ping 模块
command 模块
1
| ansible all -m command -a "date"
|
shell 模块
- 在远程主机上调用 shell 来指定命令,支持 shell 特性
1
| ansible all -m shell -a "echo 123 | passwd root --stdin"
|
copy 模块
1 2 3 4 5 6 7 8
| src: 原文件路径 content: 直接指定要生成文件的内容 dest:目的地路径 owner:属主 group:属组 mode:权限
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.bak owner=root group=root mode=755"
|
fetch 模块
1 2 3 4 5
| src:远程目标路径 dest:本地路径 会在本地创建一个叫远程主机名的文件夹,防止文件重复
ansible all -m fetch -a "src=/data/nginx/index.html dest=/total/index/
|
cron 模块
1 2 3 4 5 6 7 8 9 10 11 12
| name=ansible 的任务名 minute = 分 hour = 时 day = 日 month = 月 weekday = 周 job = 要创建的内容 backup:是否备份之前的任务计划 user:新建任务计划的用户 state= present(创建) | absent(删除)
ansible all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate sync' job='ntpdate 172.25.70.250' state=absent"
|
file 模块
创建链接文件 path=/tmp/fstab.l src=/etc/fstab state=link
修改属性 path=/etc/nginx/nginx.conf owner=root group=nginx mode=644
创建目录 path=/tmp/testdir state=directory
hostname 模块
1
| ansible node3 -m name -a "name=node3.local"
|
yum 模块
1 2 3 4
| name = 软件包名 state=[installed | removed | latest]
ansible all -m yum -a "name=nginx state=installed"
|
service 模块
1 2 3 4
| name = 服务名 state=[ started | stopped | restarted ]
ansible all -m service -a "name=nginx state=restarted"
|
user 模块
1 2 3 4 5 6 7 8
| name = 用户名 system = 是否为系统账户 uid=uid shell = 使用哪个 shell group = 属组 groups = 附加组 comment = 注释 home = 家目录
|
setup