文章目录

  • 一、什么是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

或者添加以下网络源

ansible銝要otify ansible chef_ansible銝要otify


2 有了源后就可以安装ansible

[root@server4 yum.repos.d]# yum install -y ansible

ansible銝要otify ansible chef_运维_02


ansible銝要otify ansible chef_运维_03

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

ansible銝要otify ansible chef_linux_04

4编辑hosts文件

我们在/etc/ansible/hosts里编辑

ansible銝要otify ansible chef_ansible銝要otify_05


ansible銝要otify ansible chef_配置文件_06

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配置文件

ansible銝要otify ansible chef_linux_07

ansible銝要otify ansible chef_运维_08


执行时不用加-u 、-b

ansible銝要otify ansible chef_linux_09


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
  • 定义主机和组
    中括号表示一个组,也可以表示一个范围
  • ansible銝要otify ansible chef_ansible銝要otify_10

  • 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銝要otify ansible chef_Ansible_11


清单查看方式:

ansible 清单中组名称 [-i 清单文件] --list-hosts
ansible ungrouped --list-hosts
ansible all --list-hosts
ansible-inventory all --list

ansible銝要otify ansible chef_配置文件_12


组与组之间可以相互调用,并且可以向组中的主机指定变量。不过,这些变量只能在Ansible-playbook中使用,而Ansible不支持。

ansible与正则

1)匹配所有主机,all或*号功能相同
ansible all –m pingansible "*" -m ping

2)对多台主机或多个组同时执行,相互之间用冒号分隔即可
ansible "test:prod" -m ping

3)在prod组但不在test组的主机,用感叹号表示

ansible 'prod:!test' -m ping

ansible銝要otify ansible chef_linux_13


4)在prod组和test组中同时存在的主机,用&符号表示

ansible "prod:&test" -m ping

ansible銝要otify ansible chef_运维_14


5)模糊匹配

*.example.com

www*.com:database