文章目录

  • 一、playbook
    • 1. YMAL格式
    • 2. Playbook常见语法
    • 3. playbook示例
    • 4. playbook编排vsftp
    • 5. playbook编排多个hosts任务
  • 二、roles
    • 1. 创建roles的目录结构
    • 2. 通过roles实现lamp

接上一篇文章ansible环境搭建

一、playbook

playbook(剧本): 是ansible用于配置,部署,和管理被控节点的剧本。用于ansible操作的编排。使用的格式为yaml格式
文档

1. YMAL格式

YMAL文档

  • .yaml或者.yml结尾
  • 以#号开头为注释
  • 列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格)
  • 一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格)
  • 注意: 写这种文件不要使用tab键,都使用空格

简单示例

---
# 一位职工记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:- Apple- Orange- Strawberry- Mango
languages:ruby: Elitepython: Elitedotnet: Lame

2. Playbook常见语法

hosts: 用于指定要执行任务的主机,其可以是一个或多个由冒号分隔主机组.

remote_user: 用于指定远程主机上的执行任务的用户.

- hosts: group1          remote_user: root

tasks: 任务列表, 按顺序执行任务.
如果一个host执行task失败, 整个tasks都会回滚, 修正playbook 中的错误, 然后重新执行即可.

  tasks:- name: ensure apache is at the latest version   yum: name=httpd,httpd-devel state=latest- name: write the apache config file      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf

handlers: 类似task,但需要使用notify通知调用。

  • 不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次.
  • handlers最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了
   notify:                 - restart apache- name: ensure apache is running (and enable it at boot)service: name=httpd state=started enabled=yeshandlers:- name: restart apacheservice: name=httpd state=restarted

3. playbook示例

第一步:创建一个存放playbook的目录

[root@master ~]# mkdir /etc/ansible/playbook -p

第二步:准备httpd配置文件,并修改成想要的配置

yum install httpd -y

第3步: 写一个playbook文件(后缀为.yml或.yaml)

---
# vim /etc/ansible/playbook/example.yaml
---
- hosts: group1remote_user: roottasks:  - name: 安装apacheyum: name=httpd,httpd-devel state=latest- name: 编写apache配置文件      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.confnotify:- restart apache- name: 重启apacheservice: name=httpd state=started enabled=yeshandlers:  - name: restart apacheservice: name=httpd state=restarted

第4步: 执行写好的palybook

[root@master ~]# ansible-playbook /etc/ansible/playbook/example.yaml

第5步:修改apache端口号为8080,在执行playbook

[root@master ~]# vim /etc/httpd/conf/httpd.conf

4. playbook编排vsftp

写一个playbook实现

  1. 配置yum
  2. 安装vsftpd包
  3. 修改配置文件(要求拒绝匿名用户登录)
  4. 启动服务并实现vsftpd服务开机自动启动

在master上安装vsftpd

# yum -y install vsftpd
---
- hosts: group1remote_user: roottasks:- name: rm yum repositoryfile: path=/etc/yum.repos.d/ state=absent- name: 同步master上的yum源到group1组copy: src=/etc/yum.repos.d dest=/etc/- name: 同步vsftp配置文件copy: src=/etc/vsftpd/vsftpd.conf dest=/etc/vsftpd/vsftpd.confnotify:- restart vsftpd- name: 保证vsftp服务是启动的service: name=vsftpd state=started enabled=yeshandlers:- name: 重启vsftpd服务service: name=vsftpd state=restarted
# 执行
[root@master ~]# ansible-playbook /etc/ansible/playbook/vsftp.yaml

5. playbook编排多个hosts任务

在master上准备nfs配置文件

# vim /etc/exports
/share  *(ro)
# vim /etc/ansible/playbook/nfs.yml
---
- hosts: 192.168.44.20remote_user: roottasks:- name: 安装nfs服务相关软件包yum: name=nfs-utils,rpcbind,setup state=latest- name: 创建文件共享目录file: path=/share/ state=directory- name: 同步nfs配置文件copy: src=/etc/exports dest=/etc/exportsnotify: restart nfs- name: 启动rpcbind服务,并设置开机自启service: name=rpcbind state=started enabled=on- name: 启动nfs服务,并设置开机自启service: name=rpcbind state=started enabled=onhandlers:- name: restart nfsservice: name=nfs state=restarted- hosts: 192.168.44.30remote_user: roottasks:- name: 安装nfs客户端软件包yum: name=nfs-utils state=latest- name: 挂载nfs服务器的共享shell: mount 192.168.44.20:/share /mnt

执行playbook

# ansible-playbook /etc/ansible/playbook/nfs.yaml

二、roles

roles(角色): 就是通过分别将variables, tasks及handlers等放置于单独的目录中,并可以便捷地调用它们的一种机制

1. 创建roles的目录结构

files:用来存放由copy模块或script模块调用的文件。
tasks:至少有一个main.yml文件,定义各tasks。
handlers:有一个main.yml文件,定义各handlers。
templates:用来存放jinjia2模板。
vars:有一个main.yml文件,定义变量。
meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

注意:** 在每个角色的目录中分别创建files, tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录.

2. 通过roles实现lamp

需定制三个角色: httpd,mysql,php

第1步: 创建roles目录及文件,并确认目录结构

[root@master ~]# cd /etc/ansible/roles/
[root@master ~]# mkdir -p {httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}
[root@master ~]# touch {httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml[root@master roles]# yum install tree -y
[root@master roles]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── httpd
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
└── php├── files├── handlers│   └── main.yml├── meta│   └── main.yml├── tasks│   └── main.yml├── templates└── vars└── main.yml

第2步: 准备httpd服务器的主页文件,php测试页和配置文件等


[root@master roles]# echo "test main page" >  vim /etc/ansible/roles/httpd/file/index.html[root@master roles]# echo -e "<?php\n\tphpinfo();\n?>" > /etc/ansible/roles/httpd/file/test.phpyum install httpd -y
按需求修改配置文件后,拷贝到httpd角色目录里的file子目录
[root@master roles]# vim /etc/httpd/conf/httpd.conf
[root@master roles]# cp /etc/httpd/conf/httpd.conf /etc/ansible/roles/httpd/file/

第3步: 编写httpd角色的main.yml文件

[root@master tasks]# vim /etc/ansible/roles/httpd/tasks/main.yml
---- name: 安装httpdyum: name=httpd,httpd-devel state=present- name: 同步httpd配置文件copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.confnotify: restart httpd- name: 同步主页文件copy: src=/etc/ansible/roles/httpd/files/index.html dest=/var/www/html/index.html- name: 同步php测试页copy: src=/etc/ansible/roles/httpd/files/test.php dest=/var/www/html/test.php- name: 启动httpd并开机自启动service: name=httpd state=started enabled=yes

第4步: 编写httpd角色里的handler

master# vim /etc/ansible/roles/httpd/handlers/main.yml
---
- name: restart httpdservice: name=httpd state=restarted

第5步: 编写mysql角色的main.yml文件

[root@master tasks]# vim /etc/ansible/roles/mysql/tasks/main.yml
---
- name: 安装mysqlyum: name=mariadb,mariadb-server,mariadb-devel state=present- name: 启动mysql并开机自启动service: name=mariadb state=started enabled=yes

第6步: 编写php角色的main.yml文件

master# vim /etc/ansible/roles/php/tasks/main.yml
---
- name: 安装php及依赖包yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath,php-mysql state=presentnotify: restart httpd

第7步:编写lamp的playbook文件调用前面定义好的三个角色

master# vim /etc/ansible/playbook/lamp.yaml
---
- hosts: group1remote_user: rootroles:- httpd- mysql- php

第8步: 执行lamp的playbook文件

master# ansible-playbook /etc/ansible/playbook/lamp.yaml

playbook使用相关推荐

  1. ansible批量修改linux服务器密码的playbook

    从网上找到批量修改Linux服务器root密码的playbook. 使用方法: 1.输入要修改的inventory组 2.按需要,在playbook中输入要修改的IP.新密码,如下: - hosts: ...

  2. ansible组件-playbook学习笔记

    playbook的基础组件 name 定义playbook或者task的名称 hosts 用于指定要执行指定任务的主机 user 用于指定远程主机上的执行任务的用户 task 任务列表 vars 定义 ...

  3. Ansible02-实施playbook

    一.编写和运行playbook 1.1.编写playbook play 是针对清单中选定的主机运行的一组有序任务.playbook 是一个文本文件,其中包含由一个或多个按特定顺序运行的 play 组成 ...

  4. Ansible基础一Playbook(二)

    摘自:http://www.ansible.com.cn/docs/playbooks_intro.html Handlers: 在发生改变时执行的操作 (当发生改动时)'notify' action ...

  5. playbook核心元素之 -- 角色role(9)

    playbook核心元素之 --> 角色role 角色: 以特定的层级目录结构进行组织的tasks.variables.handlers.templates.files等: role_name/ ...

  6. RIM更新PlayBook基于QNX的操作系统

    为什么80%的码农都做不了架构师?>>> RIM Updates PlayBook's QNX-based Operating System RIM更新PlayBook基于QNX的操 ...

  7. 使用Ansible中的playbook

    使用Ansible中的playbook 1 playbook的功能 2 YMAL 2.1 简介 2.2 特点 2.3 语法简介 2.4 YAML列表 2.5 YAML的字典 3 playbook执行命 ...

  8. ansible自动化运维(三)——Playbook实战

    前言 1.什么是ansible playbook? Playbooks是一种完全不同的运用Ansible的方式,而且是非常之强大的:也是系统ansible命令的集合,其利用yaml语言编写,运行过程, ...

  9. ansible笔记(11):初识ansible playbook(二)

    ansible笔记(11):初识ansible playbook(二)有前文作为基础,如下示例是非常容易理解的:--- - hosts: test211remote_user: roottasks:- ...

  10. 3.playbook基础

    2019独角兽企业重金招聘Python工程师标准>>> Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT ...

最新文章

  1. 网站推广专员浅析网站推广对企业运营优化的重要性不可忽视
  2. windows+VS2017+opencv4.1.0环境配置
  3. ACM10.14题解
  4. k8s集群资源监控-监控指标和方案---K8S_Google工作笔记0052
  5. win10设置打开闪退怎么办 电脑windows10设置打开闪退解决方法
  6. Ubuntu下截图贴图软件——flameshot
  7. Caffe安装 (OPENCV4 Cuda10.2 Xavier)
  8. 创建FTP站点访问超链接
  9. 微信域名如何防封?微信域名被封了怎么办?微信域名被封能够恢复吗?_如何微信防封域名拦截检测
  10. 签署您的应用——多渠道签名打包教程
  11. 计算机设计辅助 CAD 试题汇编,计算机辅助设计试题汇编-第二单元
  12. Proteus仿真过程中External model DLL “***.DLL” not found
  13. 网页点名器(移动端、pc端)
  14. 记得十年前谷歌大量使用python_关于利用Python玩转百万答题
  15. Linux S_ISVTX 黏着位的作用
  16. 计算机科学与技术的专业概论论文,计算机科学与技术专业概论论文.docx
  17. 3D建模学习?选次世代场景还是次世代角色?
  18. 1.1计算机网络的应用
  19. 经典差动放大器应用电路详解
  20. CNN入门实战:我如何把准确率从86% 提高到99%(中)

热门文章

  1. 采购是德科技原厂二手机,你还可以这样
  2. 黄勇-flask教程-学习笔记
  3. javascript名字由来
  4. Linux定时 (计划) 任务
  5. 全国程序员工资新统计,“高危”行业就这收入?
  6. C语言中fopen()函数的使用方法
  7. 第一次接触【数据治理】之后的学习笔记
  8. blob和arrayBuffer
  9. html 内容自动分类显示,HTML文本自动分类,HTML Text Automatic Classifion,音标,读音,翻译,英文例句,英语词典...
  10. Java经典小游戏——贪吃蛇简单实现(附源码)