文章目录
- 一、什么是ansbile?
- 二、ansible的安装与配置
- 三、ansible配置清单
- 运行格式
- 常用参数
- ansible命令示例
- Inventory文件配置
- ansible与正则
一、什么是ansbile?
Ansible是近年越来越火的一款运维自动化工具,其主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率。
常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
常见的部署管理工具有Chef、Puppet、Ansible、SaltStack、Fabric.Ansible是基于python开发的,有丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。
Ansible使用过程中的不同角色,可分为:
- 使用者
– CMDB存储和管理着企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
– 基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口:PHP、Python等。
– 直接使用Ad-Hoc临时命令集调用Ansible工具集来完成任务执行。
– 通过执行Playbooks中预先编排好的任务集按序完成任务执行。 - Ansible工具集
INVENTORY:命令执行的目标对象配置文件
API:供第三方程序调用的应用程序编程接口
MODULES:丰富的内置模块
PLUGINS:内置和可自定义的插件 - 作用对象
Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。
二、ansible的安装与配置
官网网址
1添加EPEL源,yum方式安装ansible
# vim /etc/yum.repos.d/epel.repo
[epel]
name=epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
gpgcheck=0
或者添加以下网络源
2 有了源后就可以安装ansible
[root@server4 yum.repos.d]# yum install -y ansible
3 管理主机需要提前做好ssh免密
[root@server4 ~]# ssh-keygen
[root@server4 ~]# ssh-copy-id root@172.25.56.12
[root@server4 ~]# ssh-copy-id root@172.25.56.13
4编辑hosts文件
我们在/etc/ansible/hosts里编辑
ansible的基本颜色代表:
绿色 | 执行成功但未对远程主机做任何改变 |
黄色 | 执行成功并对远程主机做改变 |
红色 | 执行失败 |
三、ansible配置清单
运行格式
ansible 清单 -m 模块 -a 模块参数
常用参数
–version | 显示版本 |
-m module | 指定模块,默认为command模块 |
-v | 详细过程 -vv -vvv更详细过程 |
–list | 显示主机列表,也可以用–list-hosts |
-k | 提示输入ssh连接密码,默认key认证 |
-C | 预执行检测 |
-T | 执行命令的超时时间,默认10s |
-u | 指定远程执行的用户 |
-b | 执行sudo切换身份操作 |
-become-user=USERNAME | 指定sudo的用户 |
-K | 提示输入sudo密码 |
ansible命令示例
1)以lyx用户身份执行
ansible all -u lyx -m copy -a “src=/etc/passwd dest=/mnt”
会报错因为/mnt对其他用户不可写
2)以lyx sudo至root执行检测
ansible all -u lyx -m copy -a “src=/etc/passwd dest=/mnt” -b
放权给lyx用户显示颜色为黄色
3)以lyx sudo至devops用户执行检测
ansible all -m ping -u bruce -b --become-user devops
如何让这些一步到位,不用加命令行里一个个加呢?
在lyx加目录里编写hosts及ansible.cfg配置文件
执行时不用加-u 、-b
ansible命令使用场景:非固化需求、临时一次性操作、二次开发接口调用
Inventory文件配置
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts。可以使用 -i 选项指定inventory文件
- 定义主机和组
Inventory可以直接为IP地址
172.25.56.12
端口号不是默认22端口时,可明确的表示为:
server2:2222
server2 ansible_port=2222 ansible_host=172.25.56.12 - 定义主机和组
中括号表示一个组,也可以表示一个范围 - www[1:10].example.com
- 定义主机变量
在playbook中使用时对主机进行个性化定制 - 定义组变量
[webserver]
172.25.56.12
172.25.56.13
[webserver:vars]
ntp_server=nfp.com
(webserver组中的所有主机ntp_server值为nfp.com) - 定义组嵌套及组变量
[test]
172.25.56.12
[prod]
172.25.56.12
172.25.56.13
[webserver:children]
test
prod
清单查看方式:
ansible 清单中组名称 [-i 清单文件] --list-hosts
ansible ungrouped --list-hosts
ansible all --list-hosts
ansible-inventory all --list
组与组之间可以相互调用,并且可以向组中的主机指定变量。不过,这些变量只能在Ansible-playbook中使用,而Ansible不支持。
ansible与正则
1)匹配所有主机,all或*号功能相同ansible all –m ping
ansible "*" -m ping
2)对多台主机或多个组同时执行,相互之间用冒号分隔即可ansible "test:prod" -m ping
3)在prod组但不在test组的主机,用感叹号表示
ansible 'prod:!test' -m ping
4)在prod组和test组中同时存在的主机,用&符号表示
ansible "prod:&test" -m ping
5)模糊匹配
*.example.com
www*.com:database