热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

03@ansibleplaybook剧本

playbook一、什么是PlayBookPlayBook即剧本,兵书之意#PlayBook的组成play:定义的是主机的角色(主角还是配

playbook


一、什么是PlayBook

PlayBook即"剧本","兵书"之意# PlayBook的组成
play: 定义的是主机的角色(主角还是配角)
task: 定义的是具体执行的任务(角色的台词和动作)
playbook: 由一个或多个play(角色)组成,一个play(角色)可以包含多个task(台词,动作)。#简单理解为: 使用不同的模块完成一件事情

Ansible中"剧本文件"是以yml结尾的文件。
SaltStack中"剧本文件"是以sls结尾的文件。
但是语法,使用的都是yaml语法

在这里插入图片描述

二、PlayBook与ad-hoc


特点PlayBookad-hoc
完整性
持久性
执行效率
变量支持不支持
耦合度

1.PlayBook功能比ad-hoc更全,是对ad-hoc的一种编排.
2.PlayBook能很好的控制先后执行顺序, 以及依赖关系.
3.PlayBook语法展现更加的直观.
4.playbook可以持久使用,ad-hoc无法持久使用.

三、YAML语法


语法描述
缩进YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用TAB
冒号以冒号结尾的除外,其他所有冒号后面所有必须有空格
短横线表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表

yum:name: vsftpdstate: presentyum:name:- httpd- nginx- php-fpmstate: present

四、PlayBook—《孙子兵法》编写


host:对哪些主机进行操作(演员)
remote_user:使用什么用户执行(通行证)
tasks:具体执行任务(台词和动作)

[root@m01 ~]# cat foo.yml
---
- hosts: allremote_user: rootvars:file_name: zls.txttasks:- name: Create New Filefile: name=/tmp/{{ file_name }} state=touch

五、PlayBook部署httpd

#编写httpd剧
#创建目录剧本存放目录
[root@m01 ~]# mkdir httpd#编辑Inventory
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

#需求一:编写安装httpd剧本
[root@m01 ~]# vim /root/httpd/httpd.yml
---
- hosts: web_grouptasks:- name: Install httpd Serveryum:name: httpdstate: present#检查语法
[root@m01 ~]# ansible-playbook --syntax-check httpd/httpd.ymlplaybook: httpd/httpd.yml#测试安装
[root@m01 ~]# ansible-playbook -C httpd/httpd.ymlPLAY [web_group] ***************************************************************************************************************************************************************************************************************************************************************TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************************************************
ok: [web02]
ok: [web01]TASK [Install httpd Server] ****************************************************************************************************************************************************************************************************************************************************
changed: [web02]
changed: [web01]PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************
web01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

#需求二:安装完httpd服务并启动加入开机自启
[root@m01 ~]# vim /root/httpd/httpd.yml
---
- hosts: web_group#安装httpdtasks:- name: Install httpd Serveryum:name: httpdstate: present
#启动httpd- name: Start Httpd Serversystemd:name: httpdstate: startedenabled: yes#测试安装和启动
[root@m01 ~]# ansible-playbook -C httpd/httpd.ymlPLAY [web_group] ***************************************************************************************************************************************************************************************************************************************************************TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************************************************
ok: [web02]
ok: [web01]TASK [Install httpd Server] ****************************************************************************************************************************************************************************************************************************************************
changed: [web02]
changed: [web01]TASK [Start Httpd Server] ******************************************************************************************************************************************************************************************************************************************************
changed: [web02]
changed: [web01]PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************
web01 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

#需求三:编写网站页面并启动
---
- hosts: web_group#安装httpdtasks:- name: Install httpd Serveryum:name: httpdstate: present#配置网站- name: Config Httpd Servercopy:content: zls_web_pagedest: /var/www/html/index.html
#启动httpd- name: Start Httpd Serversystemd:name: httpdstate: startedenabled: yes#执行
[root@m01 httpd]# ansible-playbook /root/httpd/httpd.yml

#需求四:开启防火墙端口
---
- hosts: web_group#安装httpdtasks:- name: Install httpd Serveryum:name: httpdstate: present#配置网站- name: Config Httpd Servercopy:content: zls_web_pagedest: /var/www/html/index.html
#启动httpd- name: Start Httpd Serversystemd:name: httpdstate: startedenabled: yes#启动防火墙- name: Start Firewalld Serversystemd:name: firewalldstate: startedenabled: yes#开启防火墙的80端口- name: Config Firewalld Serverfirewalld:service: httpimmediate: yespermanent: yesstate: enabled

#浏览器测试访问网站:
http://10.0.0.7
http://10.0.0.8

目前来说,想要根据不同主机配置不同的网站,我们可以使用多个play的方式,但是在生产环境中,我们需要写循环,来满足我们的需求,多个play了解即可

#需求五:不同的主机配置不同的网站
---
- hosts: web_group#安装httpdtasks:- name: Install httpd Serveryum:name: httpdstate: present#启动httpd- name: Start Httpd Serversystemd:name: httpdstate: startedenabled: yes#启动防火墙- name: Start Firewalld Serversystemd:name: firewalldstate: startedenabled: yes#开启防火墙的80端口- name: Config Firewalld Serverfirewalld:service: httpimmediate: yespermanent: yesstate: enabled#单独配置web01页面
- hosts: web01tasks:- name: Config Httpd Servercopy:content: zls_web01_pagedest: /var/www/html/index.html#单独配置web02页面
- hosts: web02tasks:- name: Config Httpd Servercopy:content: zls_web02_pagedest: /var/www/html/index.html[root@m01 httpd]# ansible-playbook /root/httpd/httpd.yml

六、PlayBook实战


实战一:《孙子兵法-九变篇》之"未雨绸缪,严阵以待"

#就是实现一个backup备份服务器的服务端和客户端的部

*1.演员表*

主机名wanIPlanIP服务角色
m0110.0.0.61172.16.1.61Ansible控制端(导演)
backup10.0.0.41172.16.1.41rsync服务端被控端(男一)
web0110.0.0.7172.16.1.7rsync客户端被控端(女二)
web0210.0.0.8172.16.1.8rsync客户端被控端(女二)

*2.战前准备*

灯光,音响,摄像准备…

yum源,用户,配置文件…

#创建rsync剧本存放目录
[root@m01 ~]# mkdir rsyncd#编辑Inventory
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8[backup_group]
backup ansible_ssh_host=10.0.0.41#准备rsync配置文件
[root@m01 rsyncd]# vim /root/rsyncd/rsyncd.j2
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

*3.编写剧本*

#编写剧本
[root@m01 ~]# vim /root/rsyncd/rsyncd.yml
- hosts: alltasks:#安装rsync- name: Install Rsyncd Serveryum:name: rsyncstate: present#创建www组- name: Create www Groupgroup:name: wwwgid: 666#创建www用户- name: Create www Useruser:name: wwwgroup: wwwuid: 666create_home: falseshell: /sbin/nologin- hosts: backup_grouptasks:#推送rsync配置文件- name: Scp Rsync Configcopy:src: ./rsyncd.j2dest: /etc/rsyncd.confowner: rootgroup: rootmode: 0644#创建密码文件并授权- name: Create Passwd Filecopy:content: 'rsync_backup:123'dest: /etc/rsync.passwdowner: rootgroup: rootmode: 0600#创建/backup目录- name: Create backup Directoryfile:path: /backupstate: directorymode: 0755owner: wwwgroup: wwwrecurse: yes#启动rsync服务- name: Start Rsyncd Serversystemd:name: rsyncdstate: started#检测语法
[root@m01 ~]# ansible-playbook --syntax-check /root/rsyncd/rsyncd.ymlplaybook: /root/rsyncd/rsyncd.yml#测试
[root@m01 ~]# ansible-playbook -C /root/rsyncd/rsyncd.ymlPLAY [all] ***********************************************************************************************************************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [backup]
ok: [web02]
ok: [web01]TASK [Install Rsyncd Server] *****************************************************************************************************************************************************************************************************************
changed: [backup]
changed: [web02]
changed: [web01]TASK [Scp Rsync Config] **********************************************************************************************************************************************************************************************************************
changed: [web02]
changed: [web01]
changed: [backup]TASK [Create www Group] **********************************************************************************************************************************************************************************************************************
changed: [backup]
changed: [web01]
changed: [web02]TASK [Create www User] ***********************************************************************************************************************************************************************************************************************
changed: [web02]
changed: [web01]
changed: [backup]TASK [Create backup Directory] ***************************************************************************************************************************************************************************************************************
changed: [web01]
changed: [backup]
changed: [web02]TASK [Start Rsyncd Server] *******************************************************************************************************************************************************************************************************************
changed: [web01]
changed: [web02]
changed: [backup]PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
backup : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web01 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

扩展需求:
1.给客户端推送脚本
2.加入crontab做备份


实战二:《孙子兵法-虚实篇》之"空城计"


部署NFS服务,NFS服务端,敞开大门提供挂载点给web01web02



1.演员表

主机名wanIPlanIP服务角色
m0110.0.0.61172.16.1.61Ansible控制端(导演)
nfs10.0.0.31172.16.1.31nfs服务端被控端(男一)
web0110.0.0.7172.16.1.7nfs客户端被控端(女二)
web0210.0.0.8172.16.1.8nfs客户端被控端(女二)

*2.战前准备*

#编辑Ansible Inventory
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8[backup_group]
backup ansible_ssh_host=10.0.0.41[nfs_group]
nfs ansible_ssh_host=10.0.0.31[nfs_all:children]
web_group
nfs_group#创建项目存放目录
[root@m01 ~]# mkdir nfs#准备nfs配置文件
[root@m01 ~]# cat /root/nfs/nfs.j2
/data 10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

*3.编写剧本*

[root@m01 ~]# vim /root/nfs/nfs.yml
- hosts: nfs_alltasks:#安装nfs- name: Install nfs-utilsyum:name: nfs-utilsstate: present#创建www组- name: Create www Groupgroup:name: wwwgid: 666#创建www用户- name: Create www Useruser:name: wwwgroup: wwwuid: 666create_home: falseshell: /sbin/nologin- hosts: nfstasks:#推送配置文件- name: Scp NFS Servercopy:src: ./nfs.j2dest: /etc/exportsowner: rootgroup: rootmode: 0644#创建挂载目录并授权- name: Create data Directoryfile:path: /datastate: directoryowner: wwwgroup: wwwmode: 0755recurse: yes#启动nfs-server- name: Start NFS Serversystemd:name: nfs-serverstate: startedenabled: yes#web01和web02挂载目录
- hosts: web_grouptasks:- name: Mount NFS Servermount:path: /optsrc: 10.0.0.31:/datafstype: nfsopts: defaultsstate: mounted#检查语法
[root@m01 ~]# ansible-playbook --syntax-check /root/nfs/nfs.yml
playbook: /root/nfs/nfs.yml#执行
[root@m01 ~]# ansible-playbook /root/nfs/nfs.yml

4、检查

#查看web01和web02的挂载情况

实战三:《孙子兵法-始计篇》之"兵者,诡道也"


使用playbook实现一套LAMP架构

部署需求:
1.使用yum安装httpd、php、php-mysql、php-pdo、mariadb
2.启动httpd、mariadb服务
3.下载wordpress代码
4.部署到httpd站点目录

*1.演员表*

主机名wanIPlanIP服务角色
m0110.0.0.61172.16.1.61Ansible控制端(导演)
web0110.0.0.7172.16.1.7nfs客户端被控端(男一)
web0210.0.0.8172.16.1.8nfs客户端被控端(男一)

*2.战前准备*

因为这只是一个练习,所以将apache mariadb php全部都写在一个yml文件中,并且放在一个目录下

注意:在生产中,我们需要每一个服务单独拎出来,解耦。

#创建项目目录
[root@m01 ~]# cd lamp/#编辑Inventory
[root@m01 lamp]# cat /etc/ansible/hosts
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8[backup_group]
backup ansible_ssh_host=10.0.0.41[backup_all:children]
web_group
backup_group[nfs_group]
nfs ansible_ssh_host=10.0.0.31[nfs_all:children]
web_group
nfs_group

*3.编写剧本*

[root@m01 ~]# vim /root/lamp/lamp.yml
- hosts: web_grouptasks:#安装指定服务- name: Install httpd mariadb php Serveryum:name: "{{ packages }}"vars:packages:- httpd- mariadb-server- php- php-mysql- php-pdo#启动httpd服务- name: Start httpd Serversystemd:name: httpdstate: startedenabled: yes#启动mariadb服务- name: Start httpd Serversystemd:name: mariadbstate: startedenabled: yes#下载wordpress- name: Get Wordpress Packageget_url:url: "http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz"dest: /var/www/html#解压wordpress- name: Unarchive Wordpress Packageunarchive:src: /var/www/html/wordpress-5.0.3-zh_CN.tar.gzdest: /var/www/htmlcopy: no#检查语法
[root@m01 lamp]# ansible-playbook --syntax-check /root/lamp/lamp.ymlplaybook: /root/lamp/lamp.yml#执行
[root@m01 lamp]# ansible-playbook /root/lamp/lamp.yml

4、检查访问

#浏览器访问:
http://10.0.0.7/wordpress/wp-admin/setup-config.php
http://10.0.0.8/wordpress/wp-admin/setup-config.php


推荐阅读
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • `chkconfig` 命令主要用于管理和查询系统服务在不同运行级别中的启动状态。该命令不仅能够更新服务的启动配置,还能检查特定服务的当前状态。通过 `chkconfig`,管理员可以轻松地控制服务在系统启动时的行为,确保关键服务正常运行,同时禁用不必要的服务以提高系统性能和安全性。本文将详细介绍 `chkconfig` 的各项参数及其使用方法,帮助读者更好地理解和应用这一强大的系统管理工具。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 1. 设置用户密码:使用 `slappasswd` 工具生成加密密码,确保账户安全。具体步骤如下:输入命令 `slappasswd -s NewPassword`,系统将提示重新输入新密码,并生成加密后的哈希值 {SSHA}xxxxxxxxxxxxxxxxx。2. 编写配置文件:编辑 `vildapus` 配置文件,添加必要的用户账户信息,以确保新用户能够顺利登录系统。 ... [详细]
  • 利用Apache构建高效稳定的Web服务器环境
    本文详细介绍了如何利用Apache构建高效稳定的Web服务器环境。首先,概述了Apache服务器的基本概念及其安装步骤,并深入探讨了相关配置文件的设置方法。接着,通过具体的实验环境示例,展示了服务端(域名:zhangpp63.cn,IP地址:192.168.1.63)和客户端的配置过程,确保读者能够全面理解并实际应用这些技术。此外,还提供了一些优化建议,以提高服务器的性能和稳定性。 ... [详细]
author-avatar
佛山越野e族99_990
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有