首页 > 其他分享 >Playbook剧本案例实战

Playbook剧本案例实战

时间:2024-08-24 15:22:19浏览次数:15  
标签:实战 httpd name 案例 state nfs Playbook root m0

script模块

script模块⽤于在远程机器上执⾏本地脚本。

# 在master上准备⼀个脚本

[root@m0 ~]#vim test.sh

mkdir /tmp/three

touch /tmp/three/test

echo 'i am echo,is used write' > /tmp/three/test

[root@m0 ~]#source test.sh

# 在group02的远程机器⾥都执⾏master上的/tmp/test.sh

脚本(此脚本不⽤给执⾏权限)

[root@m0 ~]#ansible group02 -m script -a '~/test.sh'

扩展: 使⽤shell脚本实现在group1的被管理机⾥的mariadb⾥创建⼀个abc库

#!/bin/bash

yum install mariadb-server -y &> /dev/null

systemctl start mariadb

systemctl enable mariadb

mysql << EOF

create database abc;

quit

EOF

# 把上⾯的脚本使⽤script模块在group02被管理机⾥执⾏

command与shell模块

两个模块都是⽤于执⾏linux命令的,这对于命令熟悉的⼯程师来说,⽤起来⾮常high。

shell模块与command模块差不多(command模块不能执⾏⼀些类似$HOME,>,<,|等符号,但shell可以)

https://docs.ansible.com/ansible/latest/modules/command_modul

e.html

# 在管理机上安装nfs、rpcbind

[root@m0 ~]#ansible group02 -m service -a 'name=nfs,state=started, enabled=yes'

[root@m0 ~]#ansible group02 yum -a 'name=rpcbind state=latest'

# 启动nfs

[root@m0 ~]#ansible group02 -m command -a 'systemctl start nfs'

[root@m0 ~]#ansible group02 -m command -a 'systemctl enable nfs'

# 测试

[root@m0 ~]#ansible group02 -m file -a 'path=/static state=directory'

[root@m0 ~]#ansible group02 -m file -a 'path=/static/test01 state=touch'

[root@ab ~]# ls /static/

test01

# 共享

[root@m0 ~]#yum -y install nfs-utils

[root@m0 ~]#yum list installed|grep nfs

[root@m0 ~]#ls /nfs/

[root@m0 ~]#mount -t nfs 192.168.2.177:/static /nfs/

Playbook的使用

1、概述:

playbook(剧本): 是ansible⽤于配置,部署,和管理被控节点的剧本。⽤于ansible操作的编排。

考:https://docs.ansible.com/ansible/latest/user_guide/playboks_intro.html,使⽤的格式为yaml格式(saltstack,elk,docker,docker-compose,kubernetes等也都会⽤到yaml格式)

2、基础语法:

   YMAL格式

(1)以.yaml或.yml结尾

(2)⽂件的第⼀⾏以 "---"开始,表明YMAL⽂件的开始(可选的)

(3)以#号开头为注释

(4)列表中的所有成员都开始于相同的缩进级别, 并且使⽤⼀个 "-" 作为开头(⼀个横杠和⼀个空格)

(5)⼀个字典是由⼀个简单的 键: 值 的形式组成(这个冒号后⾯必须是⼀个空格)

参考: https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html#yaml-syntax

注意: 写这种⽂件不要使⽤tab键,都使⽤空格

3、playbook实例

第1步: 创建⼀个存放playbook的⽬录(路径⾃定义)

[root@m0 ~]#mkdir /etc/ansible/playbook

第2步: 准备httpd配置⽂件,并修改成你想要的配置

[root@m0 ~]#yum install httpd -y

按需要修改你想要的配置(为了测试可以随意改动标记⼀下)

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

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

[root@m0 ~]#vim /etc/ansible/playbook/example.yaml

---

- hosts: group02

remote_user: root

tasks:

- name: 安装apache

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

notify:

 - restart apache、

- name:  重启apache

service: name=httpd state=started enabled=yes

handlers:

- name: restart apache

service: name=httpd state=restarted

第4步: 执⾏写好的palybook

会显示出执⾏的过程,并且执⾏的每⼀步都有ok,changed,failed等标识,执⾏如果有错误(failed)会回滚,解决问题后,直接再执⾏这条命令即可,并会把failed改为changed(幂等性)。

Playbook常见语法

hosts: ⽤于指定要执⾏任务的主机,其可以是⼀个或多个由冒号分隔主机组。

remote_user: ⽤于指定远程主机上的执⾏任务的⽤户。

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通知调⽤。

1)不管有多少个通知者进⾏了notify,等到play中的所有task执⾏完成之后,handlers也只会被执⾏⼀次。

2)handlers最佳的应⽤场景是⽤来重启服务,或者触发系统重启操作,除此以外很少⽤到了。

notify:

- restart apache

- name: ensure apache is running (and enable it

at boot)

service: name=httpd state=started enabled=yes

handlers:

- name: restart apache

service: name=httpd state=restarted

variables: 变量,定义变量可以被多次⽅便调⽤。

[root@m0 ~]#vim /etc/ansible/playbook/example2.yaml

---

- hosts: group1

remote_user: root

vars:

- user: test1

tasks:

- name: create user

user: name={{user}} state=present

[root@m0 ~]#ansible-playbook /etc/ansible/playbook/example2.yaml

案例一: playbook编排vsftpd

# 先卸载之前安装过的vsftpd,再安装vsftpd,最后启动vsftpd

[root@m0 ~]#vim test001.yml

---

- hosts: group02

  remote_user: root

  tasks:

  - name: 卸载vsftpd

    yum: name=vsftpd state=absent

  - name: 安装vsftpd

yum: name=vsftpd state=latest

[root@m0 ~]# ansible-playbook ./test001.yml

# 测试

[root@ab ~]# yum list installed|grep vsftpd

vsftpd.x86_64                         3.0.2-29.el7_9                   @updates

[root@m0 ~]# vim test001.yml

---

- hosts: group02

  remote_user: root

  tasks:

  - name: 卸载vsftpd

    yum: name=vsftpd state=absent

  - name: 安装vsftpd

    yum: name=vsftpd state=latest

  - name: 启动vsftpd

    service: name=vsftpd state=started enabled=yes

- name: 修改配置文件

    command: sed -i '/^anonymous_enable=YES/s/YES/NO/g' /etc/vsftpd/vsftpd.conf

    notify:

- abcdefg

handlers:

- name: restart vsftpd

service: name=vsftpd state=restarted

案例二: 修改httpd的端⼝为8080,再执⾏playbook测试

[root@m0 ~]# vim test002.yml

---

- hosts: group02

  remote_user: root

  tasks:

  - name: 将管理机的repo文件复制到被控主机

    copy: scr=/etc/yum.repos.d dest=/etc/

  - name: 安装httpd

    yum: name=httpd state=present

  - name: 修改配置文件

    command: sed -i '/^Listen/s/80/8080/g' /etc/httpd/conf/httpd.conf

  - name: 修改默认的资源文件

command: echo 'xxx' > /var/www/html/index.html

- name: 启动httpd服务

  service: name=httpd state=started

playbook编排多个hosts任务

案例: 编排nfs搭建与客户端挂载

1, 在master上准备nfs配置⽂件

[root@m0 ~]# vim /etc/exports

/share *(ro)

2,修改hosts主机文件

[root@m0 ~]# vim /etc/ansible/hosts

[s0]

192.168.2.177

[s1]

192.168.2.178

3, 编写yaml编排⽂件

[root@m0 ~]# vim test003.yml

---       # ---代表开始(可选项,不写也可以)
-       hosts:          s1
        remote_user:    root        
        tasks:
        -       name:   安装nfs-utils
                yum:    name=nfs-utils  state=present

        -       name:   安装rpcbind
                yum:    name=rpcbind    state=present
        -       name:   创建共享目录
                file:   path=/static   state=directory

        -       name:   配置文件
                shell:  echo '/static    *(ro,sync)' > /etc/exports
                notify:
                -       rstss

        -       name:           启动服务nfs
                service:        name=nfs        state=started enabled=yes
        -       name:           启动服务rpcbind
                service:        name=rpcbind    state=started enabled=yes
        handlers:
                -       name:   rstss
                        service:        name=nfs state=restarted

                # 这⾥不能⽤---分隔,会报语法错误(后⾯课程玩k8s编排也写YAML ⽂件,是可以⽤---来分隔段落的)

-       hosts:  s2
        remote_user:    root
        tasks:
        -       name:   安装nfs-utils
                yum:    name=nfs-utils   state=latest
        -       name:   创建挂载目录
                file:   path=/nfs   state=directory
        -       name:   挂载nfs文件
                command:        mount -t nfs 192.168.71.178:/static /nfs

4, 执行playbook

[root@m0 ~]# ansible-playbook test003.yml

标签:实战,httpd,name,案例,state,nfs,Playbook,root,m0
From: https://blog.csdn.net/m0_74614835/article/details/141319852

相关文章

  • Python爬虫案例一:获取古诗文并按用户输入的作者名进行数据保存
    前言:1、什么是爬虫?也称为网页蜘蛛(WebSpider),通俗来说,解放人的双手,去互联网获取数据,以数据库,txt,excel,csv,pdf,压缩文件,image,video,music保存数据。本质:模拟浏览器,向服务器发送网络请求,接受服务器返回的数据,并保存数据。2、爬虫的分类?A......
  • SpringBoot医疗废物管理系统 项目编号:200082(案例分析)
    摘  要随着医疗废物管理的重要性日益凸显,如何高效管理和处理医疗废物成为医疗机构面临的挑战。该系统涵盖存储间主管、运输员用户、处理地主管和管理员四个角色,旨在实现医废信息管理、出入库记录、运输信息跟踪、处理地信息管理等功能。通过技术手段提升医疗废物管理......
  • 大数据技术之Flume应用案例(2)
    目录 监控端口数据官方案例步骤1:准备环境步骤2:配置FlumeAgent步骤3:启动FlumeAgent步骤4:发送数据到Flume步骤5:查看HDFS中的数据注意事项示例说明实时监控单个追加文件案例需求分析实现步骤(1)确保环境变量配置正确(2)创建flume-file-hdfs.conf......
  • 前端宝典九:React Native从入门到精通实战
    本文主要介绍ReactNative新旧框架对比React与ReactNative区别ReactNative性能优化其中第3点ReactNative性能优化的拆包分包,是项目实战中使用过的,在这里整理分享,如果没有用过的小伙伴会觉得晦涩难懂,建议按照在实际项目中需要去实践,纸上得来终觉浅,绝知此事要躬行。一、......
  • 【HarmonyOS NEXT应用开发】案例69:基于原生能力的压缩与解压缩能力
    一、场景描述概览、常用图片编码格式比对及系统支持情况压缩格式简介系统支持/使用方式zip普及率高,适用范围也最广,压缩速度相比rar快一些ArkTs支持,可通过zlib实现,jsziprarrar格式比zip更能够提供较好的压缩率,但压缩速度也相对慢一些三方库支持,通过Unrar实现......
  • 基于华为昇腾910B和LLaMA Factory多卡微调的实战教程
      大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学习和......
  • Flutter实战篇
    第四章Flutter实战4.1FluterAPP代码结构''lib”Dart代码目录“ios”、“android”是两个平台相关代码、配置目录pubspec.yaml是依赖的组件库配置如:environment:sdk:">=2.12.0<3.0.0"dependencies:flutter:sdk:flutter#Thefollowinga......
  • Flask开发实战-初识flask
    Flask开发实战-初识FlaskFlask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用......
  • 【HarmonyOS NEXT星河版开发实战】天气查询APP
    目录前言界面效果展示首页添加和删除 界面构建讲解1.获取所需数据 2.在编译器中准备数据 3.index页面代码讲解 3.1导入模块: 3.2 定义组件:3.3 定义状态变量:3.4  定义Tabs控制器:3.5 定义按钮样式: 3.6 页面显示时触发的方法: 3.7 获取数据的方......
  • MATLAB进行神经网络建模的案例
    下面是一个使用MATLAB进行神经网络建模的案例,该案例涉及使用神经网络来逼近一个未知系统的输入输出关系。这个案例与您提到的学习资料中的实例类似,但我会简化并解释每个步骤。案例背景假设我们有一组输入和输出数据,我们希望通过建立一个神经网络模型来逼近这些数据之间的......