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详解的更多相关文章

  1. Ansible之Playbook详解、案例

    什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...

  2. ansible:playbook详解

    Blog:博客园 个人 概述 playbook是由一个或者多个play组成的列表. 主要功能是将预定义的一组主机装扮成事先通过ansible中的task定义好的角色.task实际是调用ansible的 ...

  3. 3.3、Ansible命令参数详解

    0.ansible 命令参数详解: [root@localhost ~]# ansible Usage: ansible <host-pattern> [options] Options: ...

  4. Ansible Facts 变量详解

    Ansible Facts 变量详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. ...

  5. ansible自动化运维详细教程及playbook详解

    前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...

  6. ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...

  7. Ansible Playbook 详解

    一.playbook 的简单使用 1.创建文件实例 (1)编辑配置文件 [root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansib ...

  8. ansible playbook详解

    ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...

  9. Ansible 常用模块详解

    经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...

随机推荐

  1. mac攻略(九) -- ssh工具secureCRT

    mac ssh 客户端 : 本身mac直接使用终端来ssh连接就很方便,但是使用过程中随着远程服务器的增多和zsh和远程服务器编码不同产生了乱码,决定安装一款ssh终端软件,以下方法亲测可用,感谢提供 ...

  2. laravel5.2总结--软删除

    当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...

  3. Java并发之(1):volatile关键字(TIJ21-21.3.3 21.3.4)

    Java并发Java服务器端编程的一项必备技能. ** 1 简介    volatile是java中的一个保留关键字,它在英语中的含义是易变的,不稳定的.volatile像final.static等其 ...

  4. PyInstaller打包python脚本

    用python写的工具写好了,想打包然后发给测试同事使用,最后选择了PyInstaller,支持Windows.Linux.OS X,支持打包成一个文件夹或单个EXE文件.   我是直接在线安装的,在 ...

  5. python学习-- Django REST framework 序列化数据操作

    一.为什么要返回json数据? 一般来说前端要用到从后台返回的数据来渲染页面的时候,这时候后台就需要向前端返回json类型的数据,简单直观便于理解 ,就类似于 {"xxx":{[& ...

  6. maven学习(十一)——maven中的聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...

  7. import from 相对路径

    项目目录 - server - static - src - - stroe - - router - - main.js - app.js src为前端文件,src目录下有main.js代码如下 i ...

  8. Codeforces #990E Post Lamp

    题目大意 今欲用若干条长为 $k$($1\le k\le m, k\in \mathbb{Z}$) 的线段覆盖数轴上 $[0,n]$ 这一段.线段的起点(左端点)必须为 $[0, n-1]$ 中的某个 ...

  9. 洛谷4438 [Hnoi2018]道路 【树形dp】

    题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ...

  10. 5-Dalvik垃圾收集机制Cocurrent GC

    Dalivik垃圾回收收机制Cocurrent GC简介和学习计划 导语: 在C/C++中,开发者需要手动地管理在堆中分配的内存,但是这往往导致很多问题. 1. 内存分配之后忘记释放,造成内存泄漏. ...