ansible-playbook的使用
1. ansible playbook介绍:
简单的说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务。
ansible Playbook使用YAML语法结构,所以配置阅读起来都比较简单。
2. ansible playbook组成结构:
- target section: 定义将要执行playbook的远程主机组
- variable section: 定义playbook运行时需要使用的变量
- task section: 定义将要在远程主机上执行的任务列表
- handler section: 定义task执行完成以后需要调用的任务
3. ansible playbook主要参数:
3.1. Target section常用参数:
- hosts:定义远程主机组
- remote_user:执行该任务的用户
- sudo: 设置为yes的时候,执行任务的时候使用root权限
- sudo_user 如果你设置用户为 admin ,那么你执行的时候会使用 admin 用户的权限
- connection 通过什么方式连接到远程主机,默认是ssh
- gather_facks 是否启用在远程主机执行setup模块,默认是会执行的,可用同setup模块获取远程主机的信息,在定义变量的时候使用
3.2 Variabler section常用参数:
- vars: 定义格式 变量名:变量值
- vars_files: 指定变量文件
- vars_prompt: 用户交互模式自定义变量
- setup: 模块取远程主机的值
3.3 Task section常用参数:
- name:输出到屏幕的信息
- action:定义执行的动作调用ansible的模块例如:yum name=http state=installed就是安装apache服务
- copy:复制本地文件到远程主机
- template:复制.j2格式的变量文件到远程主机,并且复制之后的文件替换变量的值
- service :定义服务的状态
3.4 handler section常用参数:
可以理解为处理器,主要为 task section 进行调用,为任务列表操作完毕后的后续动作,当关注的资源发生变化时执行的操作
4. ansible playbook测试案例:
4.1 案例1: 安装httpd服务
vim httpd_v1.yaml
- hosts: websrvs
remote_user: root
tasks:
- name: install httpd service
yum: name=httpd state=present
- name: copy httpd conf
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
- name: start httpd service
service: name=httpd state=started
ansible-playbook --syntax-check httpd_v1.yaml #检查代码语法
ansible-playbook httpd_v1.yaml
案例1主要是安装apache httpd web服务器,通过yum模块安装,copy模块将配置文件拷贝到远程主机,并且启动服务
4.2 案例2: 配置文件更新后自动重启httpd服务:
vim httpd_v2.yaml
- hosts: websrvs
remote_user: root
tasks:
- name: install httpd service
yum: name=httpd state=present
- name: copy httpd conf
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
tags: config
notify:
- restart httpd service
- name: start httpd service
service: name=httpd state=started
handlers:
- name: restart httpd service
service: name=httpd state=restarted
ansible-playbook --syntax-check httpd_v2.yaml
ansible-playbook -t config httpd_v2.yaml
案例2使用了handlers模块,只要httpd.conf配置文件更新了,比如我们更改了httpd的暴露端口,默认是80端口,现在我更改成8080,那么就可以触发服务重启handlers. 同时针对复制配置文件专门打了tag,执行ansible-playbook -t config httpd_v2.yaml 可以实现只执行copy文件的这一个tasks;
4.3 案例3: 通过变量的方式修改配置文件的值:
vim httpd_v3.yaml
- hosts: websrvs
remote_user: root
vars:
http_port: "8899"
src_httpd_dir: /etc/httpd/conf
dst_httpd_dir: "/etc/httpd/conf"
tasks:
- name: install httpd service
yum: name=httpd state=present
- name: copy httpd conf
template: src="{{src_httpd_dir}}/httpd.conf.j2" dest="{{dst_httpd_dir}}/httpd.conf"
notify:
- restart httpd service
- name: start httpd service
service: name=httpd state=started
handlers:
- name: restart httpd service
service: name=httpd state=restarted
cp -r /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.j2 #定义httpd的模板配置文件
vim /etc/httpd/conf/httpd.conf.j2 #修改模板配置文件,主要修改监听的端口和主机名两个地方
Listen {{ansible_default_ipv4[‘address‘]}}:{{http_port}}
ServerName {{ansible_nodename}}:{{http_port}}
此处用到了template模块,可以拷贝含有变量的文件到目标机器,这里实际上用到的是python的jinja2语法。源机器的配置文件里面用到了自动以变量httpd_port,也用到了setup 中的 facts,facts的查看可以使用如下命令:
[[email protected] playbooks]# ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"
10.83.32.130 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.83.32.130"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
10.83.32.131 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.83.32.131"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
如果不使用filter过滤的话,会把所有的facts查询出来,这些都是系统默认的,ansible默认可以获取到的远程主机信息,包括cpu、内存、磁盘、网卡、ip等信息;
今天的博文就写到这里了,下期还会继续带大家一起探讨和学习ansible的使用。最近一个人生活,老婆和小孩都回老家了,所以有了更多的时间来看书、学习、运动,还有就是写博文了。感谢大家一直以来的持续关注,最近我准备再出一系列专门针对新手的linux运维专栏,主要从最简单的LNMP安装 LAMP安装 tomcat安装 MYSQL安装 linux基础命令等入手。
博文的更详细内容请关注我的个人微信公众号 “云时代IT运维”,本公众号旨在共享互联网运维新技术,新趋势; 包括IT运维行业的咨询,运维技术文档分享。重点关注devops、jenkins、zabbix监控、kubernetes、ELK、各种中间件的使用,比如redis、MQ等;shell和python等运维编程语言;本人从事IT运维相关的工作有十多年。2008年开始专职从事Linux/Unix系统运维工作;对运维相关技术有一定程度的理解。本公众号所有博文均是我的实际工作经验总结,基本都是原创博文。我很乐意将我积累的经验、心得、技术与大家分享交流!希望和大家在IT运维职业道路上一起成长和进步;
原文地址:https://blog.51cto.com/zgui2000/2424222