【运维知识进阶篇】Ansible自动化运维-PlayBook详解

news2025/1/23 10:45:46

这篇文章给大家介绍下PlayBook,我们叫它剧本,它是以一种固定的格式,将多个ad-hoc放入yml文件中。在Ansible中,剧本文件是yml结尾的,在SaltStack中剧本文件是sls结尾的,但是两者语法都是使用的yaml语法。

PlayBook与ad-hoc区别

1、PlayBook功能比ad-hoc全,是对ad-hoc的一种编排

2、PlayBook能很好的控制先后执行顺序,以及依赖关系

3、PlayBook语法展现更加直观

4、PlayBook可以持久使用,ad-hoc无法持久使用

YAML语法

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

PlayBook部署实战

1、部署httpd

1、安装httpd服务
2、启动httpd服务并加入开机自启动
3、编写网站页面并启动
4、开启防火墙端口
5、不同的主机配置不同的网站
#创建剧本存放目录
[root@Ansible ~]# mkdir -p ansible/httpd

#编辑主机列表
[root@Ansible ~]# cat /etc/ansible/hosts

[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

#编写剧本
[root@Ansible ~]# cat ansible/httpd/httpd.yml 
- hosts: web_group
  tasks:
    - name: Install httpd Server    #安装httpd
      yum: 
        name: httpd
        state: present
    - name: Start httpd Server      #开启httpd服务
      systemd:
        name: httpd
        state: started
        enabled: yes
    - name: Start Firewalld Server  #开启防火墙
      systemd: 
        name: firewalld
        state: started
        enabled: yes
    - name: Config Firewalld Server #配置防火墙服务
      firewalld:
        service: http
        immediate: yes
        permanent: yes
        state: enabled
- hosts: web01
  tasks: 
  - name: Config Httpd Server        #增加Web01页面
    copy:
        content: Web01
        dest: /var/www/html/index.html
- hosts: web02
  tasks:
  - name: Config Httpd Server        #增加Web02页面
    copy:
        content: Web02
        dest: /var/www/html/index.html   
[root@Ansible ~]# ansible-playbook --syntax-check ansible/httpd/httpd.yml    #检查语法

playbook: ansible/httpd/httpd.yml
[root@Ansible ~]# ansible-playbook ansible/httpd/httpd.yml    #执行剧本

#浏览器访问10.0.0.7和10.0.0.8即可

 

 2、Backup备份服务器和客户端的部署

#创建rsync剧本存放目录
[root@Ansible ~]# mkdir ansible/rsyncd

#编辑主机列表
[root@Ansible ~]# 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

#准备rsync配置文件
[root@Ansible ~]# cat ansible/rsyncd/rsyncd.conf    #最好是与剧本放到同一目录
uid = rsync
gid = rsync
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]
path = /backup

#编写剧本
[root@Ansible ~]# cat ansible/rsyncd/rsyncd.yml
- hosts: all
  tasks:
    - name: Install Rsyncd Server
      yum: 
        name: rsync
        state: present
    - name: Create www Group
      group:
        name: www
        gid: 666
    - name: Create www User
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false
- hosts: backup_group
  tasks:
    - name: Scp Rsync Config
      copy: 
        src: /root/ansible/rsyncd/rsyncd.conf
        dest: /etc/rsyncd.conf
        owner: root
        group: root
        mode: 0644
    - name: Create backup Directory
      file:
        path: /backup
        state: directory
        mode: 0755
        owner: www
        group: www
        recurse: yes
    - name: Start Rsyncd Server
      systemd:
        name: rsyncd 
        state: started

#检查剧本
[root@Ansible ~]# ansible-playbook --syntax-check ansible/rsyncd/rsyncd.yml 

playbook: ansible/rsyncd/rsyncd.yml

#运行剧本
[root@Ansible ~]# ansible-playbook ansible/rsyncd/rsyncd.yml

完成后还可以尝试给客户端推送数据,加入crontab做备份等等操作。 

3、NFS服务部署

#1、添加目标服务器到主机列表并做ssh免密钥
[root@Ansible ~]# cat /etc/ansible/hosts
[nfs_group]
nfs ansible_ssh_host=10.0.0.31

[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_all:children]
nfs_group
web_group

[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.31

#2、创建nfs的目录
[root@Ansible ~]# mkdir ansible/nfs/

#3、准备nfs配置文件添加到管理机中
[root@Ansible ~]# cat ansible/nfs/exports 
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#4、编写nfs剧本
[root@Ansible ~]# cat ansible/nfs/nfs.yml 
- hosts: nfs_all
  tasks: 
    - name: Install nfs-utils
      yum:
        name: nfs-utils
        state: present
    - name: Create www Group
      group:
        name: www
        gid: 666
    - name: Create www user
      user:
        name: www
        uid: 666
        group: www        
        shell: /sbin/nologin
        create_home: false
- hosts: nfs_group
  tasks:
    - name: Scp NFS server exports
      copy: 
        src: exports
        dest: /etc/exports
        owner: root
        group: root
        mode: 0644
    - name: Create data Directory
      file:
        path: /data
        state: directory
        owner: www
        group: www
        mode: 0755
        recurse: yes
    - name: Start NFS server
      systemd:
        name: nfs-server
        state: started
        enabled: yes
- hosts: web_group
  tasks:
    - name: Mount NFS Server
      mount:
        path: /opt
        src: 10.0.0.31:/data
        fstype: nfs
        opts: defaults
        state: mounted

#5、检查语法
[root@Ansible ~]# ansible-playbook --syntax-check /root/ansible/nfs/nfs.yml 

playbook: /root/ansible/nfs/nfs.yml

#6、执行剧本
[root@Ansible ~]# ansible-playbook ansible/nfs/nfs.yml

#7、查看web01、web02挂载情况
[root@Web01 ~]# df -h
Filesystem       Size  Used Avail Use% Mounted on
10.0.0.31:/data   19G  2.0G   17G  11% /opt

[root@Web02 ~]# df -h
Filesystem       Size  Used Avail Use% Mounted on
10.0.0.31:/data   19G  2.0G   17G  11% /opt

4、Nginx服务部署

#1、添加目标服务器至主机列表并做免密钥
[root@Ansible ~]# cat /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.7
[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.8

#2、创建剧本存放目录
[root@Ansible ~]# mkdir ansible/nginx

#3、准备nginx配置文件与代码文件
[root@Web01 ~]# scp /etc/nginx/nginx.conf /etc/nginx/conf.d/* 10.0.0.61:/root/ansible/nginx
[root@Web01 ~]# tar zcvf code.tar.gz /code
[root@Web01 ~]# scp code.tar.gz 10.0.0.61:/root/ansible/nginx

#4、写剧本
[root@Ansible ~]# cat ansible/nginx/nginx.yml
- hosts: web_group
  tasks: 
    - name: nginx.repo
      copy:
        src: nginx.repo
        dest: /etc/yum.repos.d/nginx.repo
    - name: install nginx
      yum:
        name: nginx
        state: present
    - name: start and enable nginx
      systemd:
        name: nginx
        state: started
        enabled: yes
    - name: copy nginx.conf to nginx
      copy:
        src: nginx.conf
        dest: /etc/nginx
    - name: copy 'wecenter.conf' to nginx
      copy:
        src: wecenter.conf
        dest: /etc/nginx/conf.d/wecenter.conf
    - name: copy 'wordpress.conf' to nginx
      copy: 
        src: wordpress.conf
        dest: /etc/nginx/conf.d/wordpress.conf
    - name: remove nginx defualt.conf 
      file:
        path: /etc/nginx/conf.d/defualt.conf
        state: absent
    - name: tar xf code.tar.gz
      unarchive:
        src: code.tar.gz
        dest: /
        creates: /code
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

#5、检查剧本语法
[root@Ansible ~]# ansible-playbook --syntax-check ansible/nginx/nginx.yml 

playbook: ansible/nginx/nginx.yml

#6、执行剧本
[root@Ansible ~]# ansible-playbook ansible/nginx/nginx.yml 

5、PHP服务部署

#1、将目标主机添加至主机列表
[root@Ansible ~]# cat /etc/ansible/hosts 
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

#2、创建剧本存放目录
[root@Ansible ~]# mkdir ansible/php

#3、准备必要文件:php71.tar.gz、php.ini、www.conf
[root@Ansible ~]# cd ansible/php/
[root@Ansible php]# rz -E
rz waiting to receive.

[root@Web01 ~]# scp /etc/php.ini /etc/php-fpm.d/www.conf 10.0.0.61:/root/ansible/php
root@10.0.0.61's password: 
php.ini          100%   61KB  16.5MB/s   00:00    
www.conf         100%   18KB   2.4MB/s   00:00 

#4、写剧本
[root@Ansible php]# cat php.yml 
- hosts: web_group
  tasks: 
    - name: tar xf php to web_group
      unarchive:
        src: php71.tar.gz
        dest: /root
    - name: localinstall rpm
      yum:
        name: 
          - /root/autoconf-2.69-11.el7.noarch.rpm
          - /root/automake-1.13.4-3.el7.noarch.rpm
          - /root/libevent-2.0.21-4.el7.x86_64.rpm
          - /root/libjpeg-turbo-1.2.90-8.el7.x86_64.rpm
          - /root/libmcrypt-2.5.8-13.el7.x86_64.rpm
          - /root/libmemcached-1.0.16-5.el7.x86_64.rpm
          - /root/libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
          - /root/libX11-1.6.7-3.el7_9.x86_64.rpm
          - /root/libX11-common-1.6.7-3.el7_9.noarch.rpm
          - /root/libXau-1.0.8-2.1.el7.x86_64.rpm
          - /root/libxcb-1.13-1.el7.x86_64.rpm
          - /root/libXpm-3.5.12-1.el7.x86_64.rpm
          - /root/libxslt-1.1.28-6.el7.x86_64.rpm
          - /root/mod_php71w-7.1.33-1.w7.x86_64.rpm
          - /root/pcre-devel-8.32-17.el7.x86_64.rpm
          - /root/perl-Data-Dumper-2.145-3.el7.x86_64.rpm
          - /root/perl-Test-Harness-3.28-3.el7.noarch.rpm
          - /root/perl-Thread-Queue-3.02-2.el7.noarch.rpm
          - /root/php71w-cli-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-common-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-devel-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-embedded-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-fpm-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-gd-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-mbstring-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-mcrypt-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-mysqlnd-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-opcache-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-pdo-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-pear-1.10.4-1.w7.noarch.rpm
          - /root/php71w-pecl-igbinary-2.0.5-1.w7.x86_64.rpm
          - /root/php71w-pecl-memcached-3.0.4-1.w7.x86_64.rpm
          - /root/php71w-pecl-mongodb-1.5.3-1.w7.x86_64.rpm
          - /root/php71w-pecl-redis-3.1.6-1.w7.x86_64.rpm
          - /root/php71w-process-7.1.33-1.w7.x86_64.rpm
          - /root/php71w-xml-7.1.33-1.w7.x86_64.rpm
        state: present
    - name: create group
      group:
        name: www
        gid: 666
    - name: create user
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false  
    - name: copy php.ini to web_group  
      copy: 
        src: php.ini
        dest: /etc/php.ini
    - name: copy www.conf to web_group
      copy:
        src: www.conf
        dest: /etc/php-fpm.d/www.conf
    - name: start and enable php
      systemd:
        name: php-fpm
        state: started
        enabled: yes

#5、剧本语法检查
[root@Ansible php]# ansible-playbook --syntax-check php.yml

playbook: php.yml

#6、执行剧本
[root@Ansible php]# ansible-playbook php.yml

6、Mariadb服务部署

#1、添加服务器到我们的主机列表并做免密钥
[root@Ansible ~]# cat /etc/ansible/hosts
[mysql_group]
mysql ansible_ssh_host=10.0.0.51

[root@Ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.51

#2、创建剧本目录
[root@Ansible ~]# mkdir ansible/mysql

#3、准备好数据库
[root@MySQL ~]# mysqldump -uroot -pkoten.vip -A > all.sql
[root@MySQL ~]# scp all.sql 10.0.0.61:/root/ansible/mysql

#4、写剧本
[root@Ansible ~]# cat ansible/mysql/mysql.yml 
- hosts: mysql_group
  tasks:
    - name: Install mariadb
      yum:
        name: 
          - mariadb-server
          - MySQL-python      
        state: present
    - name: Start httpd Server
      systemd:
        name: mariadb
        state: started
        enabled: yes
    - name: Copy all.sql to Mysql
      copy:
        src: all.sql
        dest: /root/all.sql
    - name: import all.sql
      mysql_db:
        login_host: localhost
        login_port: 3306
        login_user: root
        name: all
        state: import
        target: /root/all.sql
    - name: Restart MariaDB Server
      systemd:
        name: mariadb
        state: restarted

#5、检查
[root@Ansible ~]# ansible-playbook --syntax-check ansible/mysql/mysql.yml 

playbook: ansible/mysql/mysql.yml

#6、执行剧本
[root@Ansible ~]# ansible-playbook ansible/mysql/mysql.yml

 我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/582067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

军用电子元器件质量如何界定?

为了保证元器件的质量,我国制定了一系列的元器件标准。在上世纪70年代末期制定了“七专”7905技术协议和80年代初制定了“七专”8406技术协议,已具备了军用器件标准的雏形,但标准是在改革开放之前制定的,有很多局限性,…

Studio One6简体中文版全新版本功能详解

Studio One 6是一款强大的音乐编曲软件,可以帮助您使用灵活的和弦轨道功能实现音乐创作。通过新的智能模板、直观的拖放工作流、可定制的用户界面和强大的集成工具,使创建快速而轻松。 无论你选择 Studio One 哪个版本,你都可以得到无限的音轨、通道和插…

ChatGPT强到离谱,这么十一款ChatGPT浏览器插件你值得拥有

🔗 运行环境:ChatGPT 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f9…

【ChatGPT功能挖掘】论文绘图救星!

前言 💗未来全网粉丝100W、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战💗 今天分享一个使用ChatGPT来解决绘图没有思路、不知如何下手的问题! 注意看!全文干货,无废话&#xff01…

路径规划 | 图解RRT*算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 图解RRT*算法原理2 ROS C算法实现3 Python算法实现4 Matlab算法实现 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA…

chatgpt赋能python:使用Numpy在Python中进行科学计算

使用Numpy在Python中进行科学计算 对于需要进行科学计算和数据分析的程序员,Python是一个非常有用的编程语言。而Numpy(Numerical Python)则是Python生态系统中最受欢迎和广泛使用的科学计算库之一。该库提供了高效的数组操作,线…

跟着我学 AI丨知识图谱,搜索的根

搜索是现在大家都很熟悉的功能,同时也是我们搜集信息离不开的重要手段。而搜索之所以能帮助我们获取到对应的信息,其实离不开知识图谱的重要支撑。知识图谱是什么呢?为什么能够支撑起搜索的提升呢?今天我们就来认识一下知识图谱。…

36从零开始学Java之到底什么是方法的重载?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 壹哥在之前给大家讲解构造方法的时候说过,在一个类中,可以定义多个构造方法&a…

老胡的周刊(第092期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 chathub[2] ChatHub 是款全能聊天机器人客户…

Kubernetes最佳实战案例:优化容器化部署与扩展性

▲ 点击上方"DevOps和k8s全栈技术"关注公众号 Kubernetes(简称为K8s)作为目前最流行的容器编排平台,为企业提供了强大的容器管理和自动化部署能力。在实践中,许多组织已经成功地应用了Kubernetes来提高应用程序的可靠性…

旗舰手机割不动年轻人了,纷纷降价千元贱卖,苹果也未能幸免

618促销即将开启,而手机企业的促销优惠更早,在5月中旬就已开始,苹果率先降价1200元促销,随即国产手机第一大品牌跟进,苹果再反击,如今国产手机开始全面降价,就连最顽强的某国产手机品牌也开始跟…

自动化测试之JUnit单元测试框架

目录 一、什么是 JUnit 二、JUnit5 相关技术 1.注解 1.1 Test 1.2 Disabled 1.3 BeforeAll、AfterAll 1.4 BeforeEach、AfterEach 2.参数化 2.1 单参数 2.2 CSV 获取参数 2.3 方法获取参数 2.4 多参数 3.测试用例的执行顺序 3.1 顺序执行:TestMethodO…

应收账款天数和应付账款天数和现金比率和速动比率

应收账款和应付账款天数 应收账款天数计算公式为: 应收账款天数 平均应收账款 * 360 除以 销售额 应收账款天数(DOS)显示公司需要多少天才能从客户那里收回账款,所以应收账款天数增加的时候,表明应收账款管理出现恶化…

Pyside6-第二篇-QPushButton一个普通按钮

今天是Pyside6的第二篇内容。一起来看一个普通的按钮。 QPushButton。 from PySide6.QtWidgets import QWidget, QApplication, QPushButtonapp QApplication([])win QWidget() win.setWindowTitle("QPushButton按钮")btn QPushButton(win) btn.setText("触发…

浅析多模态机器学习

GPT-4的发布给ChatGPT带来了又一次飞跃,ChatGPT不仅支持文字输入,还能看得懂图片、甚至是漫画、梗图,以GPT-4为代表的多模态大模型非常强大。多模态大模型就是指模型可以处理多种结构/类型的数据,例如GPT-4,它既可以处…

Hugging Face 介绍

Hugging Face 是一家在自然语言处理和人工智能领域著名的公司,以开发开源的软件库和工具为主要贡献,其中最受欢迎的是 Transformers 库,广泛应用于诸如语言翻译、情感分析和问答等多种自然语言处理任务。此外,Hugging Face 还开发…

c++ 11标准模板(STL) std::map(七)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

100种思维模型之顺势而为思维模型-68

“我领悟到&#xff0c;人是不能推着石头往上走的&#xff0c;这样会很累&#xff0c;而且会被山上随时滚落的石头给打下去。要做的是&#xff0c;先爬到山顶&#xff0c;随便踢块石头下去。”——雷军说。 “只要站在风口上&#xff0c;猪也能飞起来“。——雷军。 顺势而为是…

JetBrains的多数据库管理和SQL工具DataGrip 2023版本在Linux系统的下载与安装配置教程

目录 前言一、DataGrip安装二、使用配置总结 前言 DataGrip是一款多数据库管理和SQL工具&#xff0c;适用于不同类型的数据库。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地管理数据库、编写SQL查询和执行数据操作。注&#xff1a;已在CentOS7.9和Ubuntu20.…

海思sdk快速上手

mpp&#xff1a;视频H.264的编码压缩 1.看linux、uboot的文档 2.移植SDK到ubuntu 2.1、三个脚本 source sdk.unpack解压 2.2、osdrv/Makefile和readme make OSDRV_CROSSarm-hisiv300-linux CHIPhi3518ev200 all报错 参考&#xff1a;ubuntu16.04 编译错误: /bin/sh: 1: pushd…