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 的过程中 ...
随机推荐
- Hive UDTF开发指南
在这篇文章中,我们将深入了解用户定义表函数(UDTF),该函数的实现是通过继承org.apache.Hadoop.hive.ql.udf.generic.GenericUDTF这个抽象通用类,UDTF ...
- Python中函数参数类型和参数绑定
参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...
- 【Combination Sum 】cpp
题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C ...
- python-侦测系统
大概就是这样 要求 告警需要一定之间内出现多次 然后才报警一次 如果恢复 必须发送恢复的信息
- C# 中的 #region 和 #endregion 的作用
C#中的 #region 和 #endregion 表示一块区域,这样在 Visual Studio 中可以将这块区域的代码折叠起来,便于查看. 虽然Visual Studio 也响应大括号的折叠,但 ...
- Mac OS 系统占用储存空间太大怎么办?
存储空间 121 GB,系统就占用 106G,然后就是不断的弹窗提醒你! 解决方法: 终端先执行一下 du -sh * 查看具体是哪里使用了存储空间,一般都是 library 占用比较多的空间, 把可 ...
- Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...
- csapp 深入理解计算机系统 csapp.h csapp.c文件配置
转载自 http://condor.depaul.edu/glancast/374class/docs/csapp_compile_guide.html Compiling with the CS ...
- Codeforces 1063D Candies for Children
题目大意 给定整数 $n, k, l, r$,$1\le n, k \le 10^{11}$,$1\le l, r \le n$ . 令 $ m = r - l + 1$,若 $m \le 0$,$m ...
- Linux系统——常见的系统调用
本文列出了大部分常见的Linux系统调用,并附有简要中文说明. 以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的 ...