Ansible之Playbook详解
1.Playbook详解
playbook是一个非常简单的配置管理和多主机部署系统,可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式.
核心元素
Hosts:主机
Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器,当某条件满足时,触发执行的操作
Roles:角色
cat test.yaml
- hosts: all
remote_user: root
tasks:
- name: install redis
yum: name=redis state=latest
- name: copy config file
copy: src=/root/playbook/redis.conf dest=/etc/redis.conf owner=redis
notify: restart redis
tags: ChangeConfigFile
- name: start redis
service: name=redis state=started
handlers:
- name: restart redis
service: name=redis state=restarted
# 检查yaml文件的语法是否正确
ansible-playbook test.yaml --syntax-check
# 检查tasks任务
ansible-playbook test.yaml --list-task
# 检查生效的主机
ansible-playbook test.yaml --list-hosts
# 干跑一遍
ansible-playbook -C test.yaml
# 指定从某个task开始运行
ansible-playbook test.yaml --start-at-task='Copy Nginx.conf'
ansible-playbook test.yaml -t ChangeConfigFile
Handlers:如果触发了指定条件,则notify就会通知handlers执行对应操作.
2.引入变量
# 引用变量,收集主机facts变量
ansible-doc -s setup
ansible 10.0.0.51 -m setup
直接引用Ansible变量
- hosts: all
remote_user: root
tasks:
- name: copy file
copy: content={{ ansible_env }} dest=/opt/ansibel_env.txt
自定义变量
- hosts: all
remote_user: root
tasks:
- name: install package {{ pkgname }}
yum: name={{ pkgname }} state=latest ansible-playbook -e pkgname=memcache -C forth.yaml
引用主机变量,在组的主机后面添加变量
[webservers]
10.0.0.51 ansibel_ssh_port=9122 ansibel_ssh_user=lixiang ansibel_ssh_pass=lixiang
10.0.0.52
第二种方式
[webservers:vars]
http_port=8080 三种调用方式示例
- hosts: webservers
remote_user: root
vars:
- pbvar: playbook Var test
tasks:
- name: command line var
copy: content={{ cmdvar }} dest=/tmp/cmd.var
- name: playbook var
copy: content={{ pbvar }} dest=/tmp/pb.var
- name: host iventory var
copy: content={{ http_port }} dest=/tmp/host.var
# cmdvar传值,中间有空格,会不识别
ansible-playbook -e cmdvar="command line var" vars.yaml
3.Templates介绍
# redis.conf.j2这个文件是从一个redis文件拷贝而来,修改了bind这一行
head /root/playbook/redis.conf.j2
bind {{ ansibel_eth0.ipv4.address4}}
cat templete.yaml
- hosts: webservers
remote_user: root
tasks:
- name: templete config file
templete: src=/root/playbook/redis.conf.j2 dest=/tmp/redis.conf
4.条件判断
条件测试-when语句:
tasks:
- name: install conf file to centos7
templete: src=/path/nginx.conf.c7.j2 dest=/etc/nginx/conf.d/nginx.conf
when: ansible_distribution_major_version == "7"
- name: install conf file to centos6
templete: src=/path/nginx.conf.c6.j2 dest=/etc/nginx/conf.d/nginx.conf
when: ansible_distribution_major_version == "6" 多条件判断
tasks:
- name: install conf file to centos7
templete: src=/path/nginx.conf.c7.j2 dest=/etc/nginx/conf.d/nginx.conf
when:
- ansible_distribution == "CentOS"
- ansible_distribution_major_version == "7"
组合条件判断
tasks:
- name: install conf file to centos7
templete: src=/path/nginx.conf.c7.j2 dest=/etc/nginx/conf.d/nginx.conf
when: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7" ) or
(ansible_distribution == "RedHat" and ansible_distribution_major_version == "7" ) 迭代:有需要循环执行任务时,可以使用迭代机制
cat iter.yaml
- hosts: webservers
remote_user: root
tasks:
- name: install {{ item }} package
yum: name={{ item }} state=latest
with_item:
- nginx
- tomcat
- mariadb-server
- redis
5.角色(roles)
每个角色,以特定的层级目录结构进行组织.
mysql/
files/:存放由copy或script等模块调用的文件;
templetes/:templete模块查找所需要模板文件的目录;
tasks/:至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含;
handlers/:至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含;
vars/:至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含;
meta/:至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系,其它的文件需要在此文件中通过include进行包含;
default/:设定默认变量时使用此目录中的main.yaml文件.
# 配置文件中指定了roles路径
roles_path=/etc/ansible/roles
mkdir -pv /etc/ansible/roles/nginx/{files,templetes,tasks,vars,handlers,meta,default}
cat /etc/ansible/roles/nginx/tasks/main.yml
- name: install nginx
yum: name=nginx state=latest
when: ansible_os_family == "RedHat"
- name: install conf
templete: src=vhost1.conf.j2 dest=/etc/nginx/conf.d/vhost1.conf
tags: conf
notify: restart nginx
- name: create site home-directory
file: path={{ ngxhomedir }} state=directory
- name: create index page
copy: src=index.html dest={{ ngxhomedir }}/
- name: start nginx
service: name=nginx state=started # 定义变量时,不用加横线
cat /etc/ansible/roles/nginx/vars/main.yml
ngxhomedir: /ngxdata/vhost1 cat /etc/ansible/roles/nginx/files/index.yml
<h1>Vhost1</h1> cat /etc/ansible/roles/nginx/handlers/main.yml
- name: restart nginx
service: name=nginx state=restarted cat nginx.yml
- hosts: webservers
remote_user: root
roles:
- nginx cat /etc/ansible/roles/nginx/templetes/vhost1.conf.j2
server{
listen 8080;
server_name {{ ansibel_fqdn}};
location / {
root "/ngxdata/vhost1";
}
}
参考博客:https://blog.51cto.com/13630803/2154192
Ansible之Playbook详解的更多相关文章
- Ansible之Playbook详解、案例
什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...
- ansible:playbook详解
Blog:博客园 个人 概述 playbook是由一个或者多个play组成的列表. 主要功能是将预定义的一组主机装扮成事先通过ansible中的task定义好的角色.task实际是调用ansible的 ...
- 3.3、Ansible命令参数详解
0.ansible 命令参数详解: [root@localhost ~]# ansible Usage: ansible <host-pattern> [options] Options: ...
- Ansible Facts 变量详解
Ansible Facts 变量详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. ...
- ansible自动化运维详细教程及playbook详解
前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...
- ansible中的playbook详解
首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...
- Ansible Playbook 详解
一.playbook 的简单使用 1.创建文件实例 (1)编辑配置文件 [root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansib ...
- ansible playbook详解
ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...
- Ansible 常用模块详解
经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...
随机推荐
- Redis实现之整数集合
整数集合 整数集合(insert)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现.举个栗子,如果我们创建一个只包含五个 ...
- Nhibernate官方体系结构图部分中文翻译
原文链接 :http://nhibernate.info/doc/nh/en/index.html#architecture 体系结构图 高度抽象NHibernate体系架构图 这幅图展示了NHibe ...
- 网络安全巧设置 Win2008 R2 防火墙详解(1)
针对一般中小企业型来说,如果希望对企业网络进行安全管理,不一定非得花高价钱购买专业的防火墙设置,直接借助操作系统本身自带的防火墙功能即可以满足一般企业的应用,今天我们就一起来探究一下Windows S ...
- windows服务安装卸载
到C盘下找到对应的开发VS的installutil.exe文件,复制到程序的执行文件(*.exe)相同目录下在开始程序中找到VS命令提示工具 转到程序的执行文件(*.exe)目录下 C:\>cd ...
- Python框架之Django学习笔记(六)
模板 上篇博文学习了动态视图,但是,视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. def current_datetime(request): now = ...
- 【3Sum Closest 】cpp
题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...
- Python基础-week07 Socket网络编程
一 客户端/服务器架构 1.定义 又称为C/S架构,S 指的是Server(服务端软件),C指的是Client(客户端软件) 本章的中点就是教大写写一个c/s架构的软件,实现服务端软件和客户端软件基于 ...
- LeetCode661图片平滑器
题目描述:包含整数的二维矩阵 M 表示一个图片的灰度.你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个, ...
- 【转】Unity5.x发布IOS项目Xcode8免签证调试发布教程
http://www.jianshu.com/p/b0fb49fbcc14 最近尝试发布一下IOS项目,发现现在发布已经简单很多了,不需要开发者账户也能简单快捷进行真机调试. 调试: 1.准备工作①硬 ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...