目录:
- Ansible Playbook 介绍
- Ansible 组件
- Ansible 示例1:远程执行shell脚本
- Ansible 示例2:远程安装nginx1.12剧本
- Ansible 示例3:远程安装nginx1.12剧本(使用notify来触发handler)
- Ansible 示例4:template模板&变量定义和引用实战
- Ansible 示例5:基于列表 items 多个值创建用户
Ansible Playbook 介绍
- Ansible可以使用单个模块,通过AD-HOC点对点模式去远程机器配置和管理,也可以将多个模块进行组合,形成剧本(playbook)任务
- 通过Playbook任务,能够集中管理多个任务,将多个任务关联起来,从而实现更加复杂工作,满足生产环境的各个需求,提高运维人员管理服务器效率
- Playbook剧本的产物YAML文件,类似XML接口(Tomcat)文件,内部有固定语法、参数等,要掌握常用的YAML语法编写,掌握满足运维管理方向的语法即可
Ansible 组件
- Playbooks 组件包括如下:
-
Target 定义 playbook 的远程主机组;
-
Variable 定义 playbook 使用的变量;
-
Task 定义远程主机上执行的任务列表;
-
Handler 定义 task 执行完成以后需要调用的任务,例如配置文件被改动,则启动 handler 任务重启相关联的服务。
- Target 常用参数如下:
- hosts 定义远程主机组;
- user 执行该任务的用户;
- sudo 设置为 yes 的时候,执行任务的时候使用 root 权限;
- sudo_user 指定 sudo 普通用户;
- connection 默认基于 SSH 连接客户端;
- gather_facks 获取远程主机 facts 基础信息。
- Variable 常用参数如下:
- vars 定义格式,变量名:变量值;
- vars_files 指 定 变 量 文 件 ;
- vars_prompt 用户交互模式自定义变量;
- setup 模块去远程主机的值;
- Task 常用参数如下:
- name 任务显示名称也即屏幕显示信息;
- action 定义执行的动作;
- copy 复制本地文件到远程主机;
- template 复制本地文件到远程主机,可以引用本地变量;
- service 定义服务的状态。
Ansible 示例1:远程执行shell脚本
- hosts: all
remote_user: root
tasks:
- name: copy nginx SHELL to Remote Server
copy: src=/root/auto_install_nginx_v1.sh dest=/tmp/ mode=645 owner=root group=root
- name: check Nginx SHELL File /tmp/
shell: ls -l /tmp/auto_install_nginx_v1.sh
- name: Jfedu Nginx WEB Server Install Process.
shell: /bin/sh /tmp/auto_install_nginx_v1.sh
Ansible 示例2:远程安装nginx剧本
- hosts: all
remote_user: root
tasks:
- name: Pcre-devel and Zlib LIB Install.
yum: name=pcre-devel,pcre,zlib-devel state=installed
- name: Nginx WEB Server Install Process.
shell: pkill nginx;cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz
;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install;/usr/lo
cal/nginx/sbin/nginx
Ansible 示例3:远程安装nginx1.12剧本(使用notify来触发handler)
判断notify前面的任务是否执行成功或者是否存在,继而执行handlers之后的任务
- hosts: all
remote_user: root
tasks:
- name: Nginx server Install 2017
file: path=/usr/local/nginx/ state=directory
notify:
- nginx install
- nginx start
handlers:
- name: nginx install
shell: cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf
nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install
- name: nginx start
shell: /usr/local/nginx/sbin/nginx
Ansible 示例4:template模板&变量定义和引用实战
Ansible Playbook 可以自定义 template 模板文件,模板文件主要用于服务器需求不一致的情况,需要独立定义的,例如两台服务器安装了 Nginx,安装完毕之后将服务器 A 的 HTTP 端口改成 80,服务器 B 的 HTTP 端口改成 81,基于 tempalte 模块轻松实现,方法步骤如下:
- Ansible hosts 文件指定不同服务器不同 httpd_port 端口,代码如下:
[web]
192.168.149.128 httpd_port=80
192.168.149.129 httpd_port=81
- Ansible 创建 nginx.conf jinja2 模板文件,cp nginx.conf nginx.conf.j2, 并修改 listen 80 为 listen {{httpd_port}},Nginx 其他配置项不变
cp nginx.conf nginx.conf.j2
listen {{httpd_port}};
- Ansible playbook 剧本 yaml
- hosts: all
remote_user: root
tasks:
- name: Nginx server Install 2017
file: path=/usr/local/nginx/ state=directory
notify:
- nginx install
- nginx config
handlers:
- name: nginx install
shell: cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz; tar xzf nginx-1.12.0
.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx; make;make install
- name: nginx config
template: src=/data/sh/nginx.conf.j2 dest=/usr/local/nginx/conf/nginx.conf
Ansible 示例5:基于列表 items 多个值创建用户
基于列表 items 多个值创建用户,通过{{}}定义列表变量,with_items 选项传入变量的值
- hosts: all
remote_user: root
tasks:
- name: Linux system Add User list.
user: name={{ item }} state=present
with_items:
- user1
- user2
- user3