先看一个yml文件示例

---
- hosts: webservers #主机组
vars: ##变量设置
http_port: 80
max_clients: 200
remote_user: root
tasks: ###主要任务
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify: ##条件触发,根据handlers的名称执行相应的handlers
- restart apache ##重启apache服务(找 handlers,名称为restart apache的handlers)
- name: ensure apache is running
service: name=httpd state=started
handlers: ##在发生改变时执行的操作
- name: restart apache
service: name=httpd state=restarted

notify 下列出的即是 handlers. 

  Handlers 也是一些 task 的列表,通过名字来引用,它们和一般的 task 并没有什么区别.Handlers 是由通知者进行 notify, 如果没有被 notify,handlers 不会执行.不管有多少个通知者进行了 notify,等到 play 中的所有 task 执行完成之后,handlers 也只会被执行一次.

常用参数命令

-u REMOTE_USER, --user=REMOTE_USER     # ssh 连接的用户名 

-k, --ask-pass               #ssh登录认证密码 

-s, --sudo       #sudo 到root用户,相当于Linux系统下的sudo命令 

-U SUDO_USER, --sudo-user=SUDO_USER     #sudo 到对应的用户 

-K, --ask-sudo-pass           #用户的密码(—sudo时使用) 

-T TIMEOUT, --timeout=TIMEOUT       # ssh 连接超时,默认  秒 

-C, --check       # 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改 

-e EXTRA_VARS, --extra-vars=EXTRA_VARS       # 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e 

-f FORKS, --forks=FORKS       # 进程并发处理,默认  

-i INVENTORY, --inventory-file=INVENTORY     # 指定 hosts 文件路径,默认 default=/etc/ansible/hosts 

-l SUBSET, --limit=SUBSET       # 指定一个 pattern,对- hosts:匹配到的主机再过滤一次 

--list-hosts               # 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 

--list-tasks           # 列出该 playbook 中会被执行的 task 

--private-key=PRIVATE_KEY_FILE     # 私钥路径 

--step                 # 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍 

--syntax-check           # 只检测 playbook 文件语法是否有问题,不会执行该 playbook 

-t TAGS, --tags=TAGS         #当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔 

--skip-tags=SKIP_TAGS         # 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行 

-v, --verbose             #输出更详细的执行过程信息,-vvv可得到所有执行过程信息。

playbook Roles(角色)

语言格式:yml

  • 大小写敏感
  • 使用缩进表示层级关系(只能用空格,不能用tab)
  • yml文件以‘---’开始
  • 支持的数据结构:字典,列表、数字、布尔、字符串
  • 列表形式

    - A

    - B

    - C

YAML格式在线校验 :http://www.bejson.com/validators/yaml_editor/

项目结构:

project_name
  site.yml                #整个任务的yml入口(名称自定义)
group_vars/all               # 存放所有变量信息
  webservers.yml
  fooservers.yml
  roles/
  common/                #role-name
  files/ ##存放配置文件,不用指绝对路径
  templates/ ##存放模板文件,不用指绝对路径
  tasks/ ##默认的主要任务入口
  handlers/ #在notify时执行的操作
  vars/ ##存放变量文件
  defaults/ #可忽略
  meta/ #角色(roles)依赖
  webservers/              #role-name
  files/
  templates/
  tasks/
  handlers/
  vars/
  defaults/
  meta/

根据上面的项目结构:

参数化的 roles,这种方式通过添加变量来实现 

为 roles 设置触发条件

定义一些 tasks,让它们在 roles 之前以及之后执行

Files和templates

  files和templates均用于ansible文件处理,两者的主要区别是:Files目录下的文件无需写绝对路径即可将文件传输到远程主机,templates目录下文件以Jinja2渲染,支持传送到主机文件的变量替换

template变量示例可看 https://www.cnblogs.com/FRESHMANS/p/8204721.html,template文件内的变量可在vars目录里直接定义

includes

使用场景:有时候发现大量的playbook内容需要重复编写,各task之间需要相互调用才能完成各自功能

官网示例

include 传递变量

动态include,在include的基础上加上when 条件判断

playbook include playbook

---
- hosts: all
remote_user: root
tasks: [...] - include: web.yml - include: db.yml

ansible-playbook && Roles && include的更多相关文章

  1. Ansible Playbook Roles and Include Statements

    介绍 虽然可以在一个非常大的文件中编写一个playbook(您可能会以这种方式开始学习playbook),但最终您将需要重新使用文件并开始组织事情. 在基本级别,饱含任务的文件允许您将配置策略分解成较 ...

  2. Ansible playbook roles

    1  概述 角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的 ...

  3. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  4. ansible playbook模式及语法

    一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...

  5. 014.Ansible Playbook Role 及调试

    一 role 简介 在ansible中,role是将playbook分割为多个文件的主要机制,大大简化了复杂的playbook的编写,同时已与复用 role各个目录的作用及可用文件 files:存放由 ...

  6. Ansible之roles模块--lnmp分布式部署

    Ansible之roles模块--lnmp分布式部署 目录 Ansible之roles模块--lnmp分布式部署 1. role模块的作用 2. roles的目录结构 3. roles内个目录含义解释 ...

  7. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  8. Ansible playbook基础组件介绍

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  9. ansible入门四(Ansible playbook基础组件介绍)

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

随机推荐

  1. WebAPI实例--第一个API

    今天终于做了第一个任务,学习API之后的第一个实例.销售设置开发API. 第一.层次结构 1.API各层 项目结构主要有五层,分别为API.BizModel.Data.DBModel.Logic. 2 ...

  2. html5制作导航条

    (1)background-repeat:no-repeat;图片不平铺 (2)使用<ul>和<li>便签,代码简介有序.易于编排. (3)在引入外部css文件时,<li ...

  3. MySQL主从复制配置遇到的部分问题

    网上配置教程很多,我也是参考其他人的教程完成的,主要遇到了以下几个问题,如果以后有人遇到相同的希望能够给大家写提示吧. 1.my.cnf文件配置 Master上的my.cnf中配置的server_id ...

  4. github链接与心得体会

    https://github.com/wangyuefang/test 第一次使用github,我觉得github是一个非常人性化的软件,使用起来很方便.而且可以把GitHub作为免费的远程仓库,如果 ...

  5. linux和Mac上安装composer

    使用命令行方式,可以直接使用下面的命令,顺序执行: php -r "copy ('https://getcomposer.org/installer','composer-setup.php ...

  6. 使用phpstudy创建本地虚拟主机

    在使用php开发网站的时候,每次测试自己的网站时,通常都是用localhost/dirname/filename.php来访问自己所写的程序 但是有时候我们需要模拟真实的场景,如通过域名访问时,如果你 ...

  7. CENTOS7修改ip

    编辑网卡设置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 编辑内容 vi /etc/sysconfig/network-scripts/ificg-en ...

  8. Nginx ACCESS阶段 如何限制IP访问

    192.168.1.0/24(最大32位的子网掩码) 每个ip是8位 那么 24/8 = 3 也就是前三个二进制 是 11111111 11111111 11111111 是指子网掩码的位数.写的是多 ...

  9. POJ3176-基础DP

    很基础的dp题.有一头奶牛想接尽量多的苹果,有w此移动机会. dp[i][w] = max(dp[i-1][w+1] + 能否吃到苹果 ,dp[i-1][w] + 能否吃到苹果)  //从上一分钟是否 ...

  10. bzoj 2212 : [Poi2011]Tree Rotations (线段树合并)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2212 思路:用线段树合并求出交换左右儿子之前之后逆序对的数量,如果数量变小则交换. 实现 ...