一、简要
ansbile是一款简单的自动化运维工具
ansible是由主机清单(配置),playbook(配置),以及各模块插件组成;简单的说就是,用户(管理员)通过ansible的主机清单配置或Playbook配置(一组任务),调用ansible的各种模块及参数来对清单中的主机进行统一管理。
ansible的安装
# 首先要安装epel源
yum install epel-release -y
yum install ansible -y
二、配置及获取帮助说明
1、配置与执行文件说明
ansible的主配置文件
###### /etc/ansible/ansible.cfg
这个文件主要定义了roles_path路径,主机清单路径,连接清单中的主机方式等配置,这些大部的默认配置已经足够我们平时使用,如需要特别配置可以自行去修改;###### /etc/ansible/hosts
这个配置文件就是默认主机清单配置文件,可通过ansible.cfg重新定义的
2、ansible 使用格式
ansible
HOST-PATTERN #匹配主机模式,如all表示所有主机
-m MOD_NAME #模块名 如:ping
-a MOD_ARGS #模块执行的参数
-f FORKS #生成几个子进行程执行
-C #(不执行,模拟跑)
-u Username #某主机的用户名
-c CONNection #连接方式(default smart)
完整示例:
[root@ansible ~]# ansible all -m shell -a "ifconfig|grep enp0s3"
172.16.3.152 | SUCCESS | rc=0 >>
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
172.16.3.216 | SUCCESS | rc=0 >>
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
3、ansible-doc 获取帮助信息
ansible模块比较多,可以通过ansible-doc --help 显示帮助信息
ansible doc -l 获取所有当前版本下的可用模块及简要信息
ansible-doc -s 模块名 获取指定模块帮助信息说明``
三、ansible常用模块
1、copy模块
从本地copy文件分发到目录主机路径
参数说明:
src= 源文件路径
dest= 目标路径
注意src= 路径后面带/ 表示带里面的所有内容复制到目标目录下,不带/是目录递归复制过去
content= 自行填充的文件内容
owner 属主
group 属组
mode 权限
2、fetch模块
从远程主机拉取文件到本地
说明:fetch使用很简单,src和dest,dest只要指定一个接收目录,默认会在后面加上远程主机及src的路径
3、command模块
在远程主机上执行命令,属于裸执行,非键值对显示;不进行shell解析;
这就是因为command模块不是shell解析属于裸执行导致的,为了能达成以上类似shell中的解析,ansible有一个shell模块;
4、shell模块
由于commnad只能执行裸命令(即系统环境中有支持的命令),至于管道之类的功能不支持,
shell模块可以做到
5、file模块
设置文件属性(创建文件)
常用参数:
path目标路径
state directory为目录,link为软件链接
group 目录属组
owner 属主
等,其他参数通过ansible-doc -s file 获取
创建软链接
6、cron模块
通过cron模块对目标主机生成计划任务
常用参数:
除了分(minute)时(hour)日(day)月(month)周(week)外
name: 本次计划任务的名称
state: present 生成(默认) |absent 删除 (基于name)
ansible all -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible all -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root
ansible all -m cron -a 'backup="True" name="test" minute="0" hour="5,2" job="ls -alh > /dev/null"'
ansilbe all -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'
7、yum模块
故名思义就是yum安装软件包的模块;
常用参数说明:
enablerepo,disablerepo表示启用与禁用某repo库
name 安装包名
state (present’ orinstalled’, latest’)表示安装, (absent’ or `removed’) 表示删除
8、service模块
服务管理模块
常用参数:
name:服务名
state:服务状态
enabled: 是否开机启动 true|false
runlevel: 启动级别 (systemed方式忽略)
9、script模块
把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行;
四、Playbook实战
playbook是Ansible的配置,部署和编排的语言。他们可以描述你所希望的远程系统强制执行的政策,或者在一般的IT流程的一组步骤;形象点的说就是:如果ansible的各模块(能实现各种功能)是车间里的各工具;playbook就是指导手册,目标远程主机就是库存和原料对象.
1、playbook的核心元素
hosts : playbook配置文件作用的主机
tasks: 任务列表 variables: 变量
templates:包含模板语法的文本文件
handlers :由特定条件触发的任务
roles:用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等
2、playbook运行方式
ansible-playbook --check # 只检测可能会发生的改变,但不真执行操作
ansible-playbook --list-hosts # 列出运行任务的主机
ansible-playbook --syntax-check playbook.yaml #语法检测
ansible-playbook -t TAGS_NAME playbook.yaml # 只执行TAGS_NAME任务
ansible-playbook playbook.yaml # 运行
3、通过playbook安装管理redis服务
第一步:在家目录下创建playbooks
[root@ansible ~]# mkidr playbooks
[root@ansible ~]# cd playbooks
[root@ansible playbooks]# cat redis_first.yaml
- hosts: all remote_user: root tasks:
- name: install redis
yum: name=redis state=latest
- name: start redis
service: name=redis state=started
第二步:语法检测
[root@ansible playbooks]# ansible-playbook --syntax-check redis_first.yaml
playbook: redis_first.yaml
将要执行的主机:
[root@ansible playbooks]# ansible-playbook --list-hosts redis_first.yaml
playbook: redis_first.yaml
play #1 (all): all TAGS: []
pattern: [u'all']
hosts (2):
192.168.0.88
192.168.0.99
第三步:执行
[root@ansible playbooks]# ansible-playbook redis_first.yaml
PLAY [all] ******************************************************************************