软件包模块、服务模块、逻辑卷模块、文件系统模块、playbook剧本,YAML语法规范、playbook剧本案例

ansible

ansible模块

yum_repository
  • 用于配置yum

  • 常用选项:

    • file: 指定文件名
    • 其他选项,请与文件内容对照
# 在webservers组中的主机上,配置yum[root@pubserver ansible]# ansible webservers -m yum_repository -a "file=myrepo name=myApp description='My App' baseurl=ftp://192.168.88.240/dvd/AppStream gpgcheck=no enabled=yes"[root@web1 ~]# cat /etc/yum.repos.d/myrepo.repo [myApp]async = 1baseurl = ftp://192.168.88.240/dvd/AppStreamenabled = 1gpgcheck = 0name = My App[root@pubserver ansible]# ansible webservers -m yum_repository -a "file=myrepo name=BaseOS description='Base OS' baseurl=ftp://192.168.88.240/dvd/BaseOS gpgcheck=no enabled=yes"[root@web1 ~]# cat /etc/yum.repos.d/myrepo.repo [myApp]async = 1baseurl = ftp://192.168.88.240/dvd/AppStreamenabled = 1gpgcheck = 0name = My App[BaseOS]async = 1baseurl = ftp://192.168.88.240/dvd/BaseOSenabled = 1gpgcheck = 0name = Base OS
yum模块
  • 用于rpm软件包管理,如安装、升级、卸载

  • 常用选项:

    • name:包名
    • state:状态。present表示安装,如果已安装则忽略;latest表示安装或升级到最新版本;absent表示卸载。
# 在webservers组中的主机上安装tar[root@pubserver ansible]# ansible webservers -m yum -a "name=tar state=present"# 在webservers组中的主机上安装wget、net-tools[root@pubserver ansible]# ansible webservers -m yum -a "name=wget,net-tools"# 在webservers组中的主机上卸载wget[root@pubserver ansible]# ansible webservers -m yum -a "name=wget state=absent"
service模块
  • 用于控制服务。启动、关闭、重启、开机自启。

  • 常用选项:

    • name:控制的服务名
    • state:started表示启动;stopped表示关闭;restarted表示重启
    • enabled:yes表示设置开机自启;no表示设置开机不要自启。
# 在test主机上安装nginx[root@pubserver ansible]# ansible webservers -m yum -a "name=nginx state=latest"#  在test主机上启动nginx,并设置它开机自启[root@pubserver ansible]# ansible webservers -m service -a "name=nginx state=started enabled=yes"
逻辑卷相关模块
  • 逻辑卷可以动态管理存储空间。可以对逻辑卷进行扩容或缩减。
  • 可以把硬盘或分区转换成物理卷PV;再把1到多个PV组合成卷组VG;然后在VG上划分逻辑卷LV。LV可以像普通分区一样,进行格式化、挂载。
  • 关闭虚拟机web1,为其添加2块20GB的硬盘
  • LINUX下KVM虚拟机新加的硬盘,名称是/dev/vdb/dev/vdc
  • vmware虚拟机新加的硬盘,名称是/dev/sdb/dev/sdc
  • 如果选nvme硬盘,名称可能是/dev/nvme0n1/dev/nvme0n2
[root@web1 ~]# lsblk    # 可以查看到新加的硬盘vdb和vdcNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTsr0     11:0    1 1024M  0 rom  vda    253:0    0   30G  0 disk `-vda1 253:1    0   20G  0 part /vdb    253:16   0   20G  0 disk vdc    253:32   0   20G  0 disk 
lvg模块
  • 创建、删除卷组,修改卷组大小

  • 常用选项:

    • vg:定义卷组名。vg:volume group
    • pvs:由哪些物理卷构成。pvs:physical volumes
# 在web1上安装lvm2,state不写,默认是present[root@pubserver ansible]# ansible web1 -m yum -a "name=lvm2"# 手工在web1上对vdb进行分区[root@web1 ~]# fdisk /dev/vdbCommand (m for help): g    # 创建GPT分区表Command (m for help): n    # 新建分区Partition number (1-128, default 1):    # 回车,使用1号分区First sector (2048-41943006, default 2048):   # 起始位置,回车Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006, default 41943006): +5G   # 结束位置+5GCommand (m for help): n   # 新建分区Partition number (2-128, default 2):   # 回车,使用2号分区First sector (10487808-41943006, default 10487808): # 起始位置,回车Last sector, +sectors or +size{K,M,G,T,P} (10487808-41943006, default 41943006): # 结束位置,回车,分区到结尾Command (m for help): w   # 存盘[root@web1 ~]# lsblk    # vdb被分出来了两个分区NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTsr0     11:0    1 1024M  0 rom  vda    253:0    0   30G  0 disk `-vda1 253:1    0   20G  0 part /vdb    253:16   0   20G  0 disk |-vdb1 253:17   0    5G  0 part `-vdb2 253:18   0   15G  0 part vdc    253:32   0   20G  0 disk # 在web1上创建名为myvg的卷组,该卷组由/dev/vdb1组成[root@pubserver ansible]# ansible web1 -m lvg -a "vg=myvg pvs=/dev/vdb1"# 在web1上查看卷组[root@web1 ~]# vgsVG   #PV #LV #SN Attr   VSize  VFree myvg   1   0   0 wz--n- <5.00g <5.00g# 扩容卷组。卷组由PV构成,只要向卷组中加入新的PV,即可实现扩容[root@pubserver ansible]# ansible web1 -m lvg -a "vg=myvg pvs=/dev/vdb1,/dev/vdb2"[root@web1 ~]# vgs  # 在web1上查看卷组VG   #PV #LV #SN Attr   VSize  VFree myvg   2   0   0 wz--n- 19.99g 19.99g
lvol模块
  • 创建、删除逻辑卷,修改逻辑卷大小

  • 常用选项:

    • vg:指定在哪个卷组上创建逻辑卷
    • lv:创建的逻辑卷名。lv:logical volume
    • size:逻辑卷的大小,不写单位,以M为单位
# 在web1上创建名为mylv的逻辑卷,大小为2GB[root@pubserver ansible]# ansible web1 -m lvol -a "vg=myvg lv=mylv size=2G"# 在web1上查看逻辑卷[root@web1 ~]# lvsLV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertmylv myvg -wi-a----- 2.00g   # mylv扩容至4GB[root@pubserver ansible]# ansible web1 -m lvol -a "vg=myvg lv=mylv size=4G"[root@web1 ~]# lvs  # 在web1上查看逻辑卷LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertmylv myvg -wi-a----- 4.00g   
filesystem模块
  • 用于格式化,也就是创建文件系统

  • 常用选项:

    • fstype:指定文件系统类型
    • dev:指定要格式化的设备,可以是分区,可以是逻辑卷
#  在web1上,把/dev/myvg/mylv格式化为xfs[root@pubserver ansible]# ansible web1 -m filesystem -a "fstype=xfs dev=/dev/myvg/mylv"# 在web1上查看格式化结果[root@web1 ~]# blkid /dev/myvg/mylv/dev/myvg/mylv: UUID="46c0af72-e517-4b15-9e53-ec72fbe1d96e" TYPE="xfs"
mount模块
  • 用于挂载文件系统

  • 常用选项:

    • path:挂载点。如果挂载点不存在,自动创建。
    • src:待挂载的设备
    • fstype:文件系统类型
    • state:mounted,表示永久挂载
# 在web1上,把/dev/myvg/mylv永久挂载到/data[root@pubserver ansible]# ansible web1 -m mount -a "path=/data src=/dev/myvg/mylv state=mounted fstype=xfs"# 在web1上查看[root@web1 ~]# tail -1 /etc/fstab /dev/myvg/mylv /data xfs defaults 0 0[root@web1 ~]# df -h /data/Filesystem             Size  Used Avail Use% Mounted on/dev/mapper/myvg-mylv  4.0G   61M  4.0G   2% /data# 在web1上,卸载/dev/myvg/mylv[root@pubserver ansible]# ansible web1 -m mount -a "path=/data state=absent"# 在web1上,强制删除/dev/myvg/mylv[root@pubserver ansible]# ansible web1 -m lvol -a "lv=mylv state=absent vg=myvg force=yes"   # force是强制# 在web1上,删除myvg卷组[root@pubserver ansible]# ansible web1 -m lvg -a "vg=myvg state=absent"

Playbook剧本

  • 常用于复杂任务的管理,以及管理经常要完成的任务
  • playbook也是通过模块和它的参数,在特定主机上执行任务
  • playbook是一个文件,该文件中需要通过yaml格式进行书写

YAML

  • YAML Ain't a Markup Language:YAML不是一个标记语言
yaml语法规范
  1. yaml文件的文件名,一般以yml或yaml作为扩展名
  2. 文件一般以---作为第一行,不是必须的,但是常用
  3. 键值对使用冒号:表示,冒号后面必须有空格。
  4. 数组使用-表示,-后面必须有空格。
  5. 相同的层级必须有相同的缩进。如果缩进不对,则有语法错误。每一级缩进,建议2个空格。
  6. 全文不能使用tab,必须使用空格。
配置vim适应yaml语法
# 文件位置和名字是固定的,用于设置vim的格式[root@pubserver ansible]# vim ~/.vimrcset ai        # 设置自动缩进set ts=2      # 设置按tab键,缩进2个空格set et        # 将tab转换成相应个数的空格

编写playbook

  • 一个剧本(即playbook),可以包含多个play
  • 每个play用于在指定的主机上,通过模块和参数执行相应的任务
  • 每个play可以包含多个任务。
  • 任务有模块和参数构成。
---- 名字: 猴王初问世职员表: 猴哥, 大马猴场景:- 名字: 石头裂开了- 名字: 天宫震颤了- 名字: 官封弼马温职员表: 猴哥, 玉皇大帝场景:- 名字: 太白金星骗猴哥- 名字: 猴哥天宫放马
# 编写用于测试连通性的playbook,相当于执行ansible all -m ping[root@pubserver ansible]# vim test.yml---- hosts: alltasks:- ping:[root@pubserver ansible]# ansible-playbook test.yml  # 执行playbook# 以上更规范的写法如下:[root@pubserver ansible]# vim test.yml---- name: test network            # play的名字,可选项hosts: all                    # 作用于所有的主机tasks:                        # 任务- name: test via ping       # 第1个任务的名字,可选项ping:                     # 第1个任务使用的模块[root@pubserver ansible]# ansible-playbook test.yml  # 执行playbook# 在dbs组的主机和web1上创建/tmp/demo目录,权限是0755。将控制端/etc/hosts拷贝到目标主机的/tmp/demo中[root@pubserver ansible]# vim fileop.yml---- name: create dir and copy filehosts: dbs,web1    # 这里的名称,必须出现在主机清单文件中tasks:- name: create dirfile:path: /tmp/demostate: directorymode: '0755'- name: copy filecopy:src: /etc/hostsdest: /tmp/demo/hosts# 执行playbook[root@pubserver ansible]# ansible-playbook fileop.yml# 在webservers组中的主机上,创建用户bob,附加组是adm;在db1主机上,创建/tmp/hi.txt,其内容为Hello World.[root@pubserver ansible]# vim two.yml---- name: create userhosts: webserverstasks:- name: create bobuser:name: bobgroups: adm- name: create filehosts: db1tasks:- name: make filecopy:dest: /tmp/hi.txtcontent: "Hello World"[root@pubserver ansible]# ansible-playbook two.yml
  • |>的区别:|它保留换行符,>把多行合并为一行
# 通过copy模块创建/tmp/1.txt,文件中有两行内容,分别是Hello World和ni hao[root@pubserver ansible]# vim f1.yml---- name: play 1hosts: webserverstasks:- name: mkfile 1.txtcopy:dest: /tmp/1.txtcontent: |Hello World!ni hao.[root@pubserver ansible]# ansible-playbook f1.yml# 查看结果[root@web1 ~]# cat /tmp/1.txt Hello World!ni hao.# 通过copy模块创建/tmp/2.txt,文件中有一行内容,分别是Hello World! ni hao[root@pubserver ansible]# vim f2.yml ---- name: play 1hosts: webserverstasks:- name: mkfile 2.txtcopy:dest: /tmp/2.txtcontent: >Hello World!ni hao.[root@pubserver ansible]# ansible-playbook f2.yml[root@web1 ~]# cat /tmp/2.txt Hello World! ni hao.
  • playbook示例
# 在webservers组中的主机上创建john用户,它的uid是1040,主组是daemon,密码为123[root@pubserver ansible]# vim user_john.yml---- name: create userhosts: webserverstasks:- name: create user johnuser:name: johnuid: 1040group: daemonpassword: "{{'123'|password_hash('sha512')}}"[root@pubserver ansible]# ansible-playbook user_john.yml# 在webservers组中的主机上删除用户john[root@pubserver ansible]# vim del_john.yml---- name: delete userhosts: webserverstasks:- name: delete user johnuser:name: johnstate: absent[root@pubserver ansible]# ansible-playbook del_john.yml
硬盘管理
  • 常用的分区表类型有:MBR(主引导记录)、GPT(GUID分区表)
  • MBR最多支持4个主分区,或3个主分区加1个扩展分区。最大支持2.2TB左右的硬盘
  • GPT最多支持128个主分区。支持大硬盘
parted模块
  • 用于硬盘分区管理

  • 常用选项:

    • device:待分区的设备
    • number:分区编号
    • state:present表示创建,absent表示删除
    • part_start:分区的起始位置,不写表示从开头
    • part_end:表示分区的结束位置,不写表示到结尾

# 在web1主机上,对/dev/vdc进行分区,创建1个1GB的主分区[root@pubserver ansible]# vim disk.yml---- name: disk managehosts: web1tasks:- name: create a partitionparted:device: /dev/vdcnumber: 1state: presentpart_end: 1GiB[root@pubserver ansible]# ansible-playbook disk.yml# 在目标主机上查看结果[root@web1 ~]# lsblk NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT.. ...vdc    253:32   0   20G  0 disk `-vdc1 253:33   0 1023M  0 part # 继续编辑disk.yml,对/dev/vdc进行分区,创建1个新的5GB的主分区[root@pubserver ansible]# vim disk.yml ... ...- name: add a new partitionparted:device: /dev/vdcnumber: 2state: presentpart_start: 1GiBpart_end: 6GiB[root@pubserver ansible]# ansible-playbook disk.yml [root@web1 ~]# lsblk NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT... ...vdc    253:32   0   20G  0 disk |-vdc1 253:33   0 1023M  0 part `-vdc2 253:34   0    5G  0 part # 继续编辑disk.yml,创建名为my_vg的卷组,它由上面创建的vdc1和vdc2构成[root@pubserver ansible]# vim disk.yml ... ...- name: create my_vglvg:vg: my_vgpvs: /dev/vdc1,/dev/vdc2# 继续编辑disk.yml,在my_vg卷组上创建名为my_lv的逻辑卷,大小1G[root@pubserver ansible]# vim disk.yml ... ...- name: create my_lvlvol:vg: my_vglv: my_lvsize: 1G# 继续编辑disk.yml,格式化my_lv为ext4[root@pubserver ansible]# vim disk.yml ... ...- name: mkfs my_lvfilesystem:dev: /dev/my_vg/my_lvfstype: ext4# 继续编辑disk.yml,将my_lv挂载到/data[root@pubserver ansible]# vim disk.yml ... ...- name: mount my_lvmount:path: /datasrc: /dev/my_vg/my_lvfstype: ext4state: mounted# 完整的disk.yml如下---- name: disk managehosts: web1tasks:- name: create a partitionparted:device: /dev/vdcnumber: 1state: presentpart_end: 1GiB- name: add a new partitionparted:device: /dev/vdcnumber: 2state: presentpart_start: 1GiBpart_end: 6GiB- name: create my_vglvg:vg: my_vgpvs: /dev/vdc1,/dev/vdc2- name: create my_lvlvol:vg: my_vglv: my_lvsize: 1G- name: mkfs my_lvfilesystem:dev: /dev/my_vg/my_lvfstype: ext4- name: mount my_lvmount:path: /datasrc: /dev/my_vg/my_lvfstype: ext4state: mounted

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

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

相关文章

请解释Java中的equals()和hashCode()方法的作用和区别。请解释Java中的AOP(面向切面编程)的作用和原理。

请解释Java中的equals()和hashCode()方法的作用和区别。 在Java中&#xff0c;equals()和hashCode()方法都是用于处理对象相等性&#xff08;equality&#xff09;的方法。 equals()方法&#xff1a; equals()方法是Object类中定义的方法&#xff0c;所有的Java类都可以使用该…

vscode连接ssh失败记录(20240202)

问题描述&#xff1a; 1、在使用vscode remote-ssh插件时连接较老版本linux时&#xff0c;出现报错Warning: Missing GLIBC > 2.28! from /lib/x86_64-linux-gnu/libc-2.27.so Error: Missing required dependencies. Please refer to our FAQ https://aka.ms/vscode-rem…

算法随想录第五十天打卡123.买卖股票的最佳时机III , 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 这道题一下子就难度上来了&#xff0c;关键在于至多买卖两次&#xff0c;这意味着可以买卖一次&#xff0c;可以买卖两次&#xff0c;也可以不买卖。 视频讲解&#xff1a;动态规划&#xff0c;股票至多买卖两次&#xff0c;怎么求&#xff1f; | …

『运维备忘录』之 Systemd 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

什么是 Java 中的 IO 和 NIO?它们之间有什么区别?什么是 Java 中的内存管理和垃圾回收?常见的垃圾回收算法有哪些?

什么是 Java 中的 IO 和 NIO&#xff1f;它们之间有什么区别&#xff1f; 在 Java 中&#xff0c;IO&#xff08;Input/Output&#xff09;和NIO&#xff08;New IO&#xff09;都是用于处理输入输出操作的API。它们之间有以下区别&#xff1a; IO&#xff08;传统IO&#xff…

11月最新版付费进群源码自动定位+开源

Nginx 1.22.1 php5.6 mysql5.6 数据库配置&#xff1a;/config/database.php 配置后台域名&#xff1a;config/extra/ip.php 设置伪静态thinkphp 后台账号88886666 密码12345 代码结构 关键代码剖析 <?php // ----------------------------------------------------…

continue语句

一、continue语句 1、continue语句介绍 2、continue语句流程图 3、快速入门案例 4、continue语句的标签

毫米波雷达在汽车领域的原理、优势和未来趋势

1 毫米波雷达的原理 汽车引入毫米波雷达最初主要是为了实现盲点监测和定距巡航。毫米波实质上是电磁波&#xff0c;其频段位于无线电和可见光、红外线之间&#xff0c;频率范围为10GHz-200GHz。工作原理类似一般雷达&#xff0c;通过发射无线电波并接收回波&#xff0c;利用障…

LeetCode 每日一题 2024/1/29-2024/2/4

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/29 514. 自由之路1/30 2808. 使循环数组所有元素相等的最少秒数1/31 2670. 找出不同元素数目差数组2/1 LCP 24. 数字游戏2/2 1686. 石子游戏 VI2/3 1690. 石子游戏 VII2/…

理论与实战:一篇看懂Python词云

实现原理 导入一篇txt文档&#xff0c;使用jieba库对文档中的文字进行分词&#xff0c;计算各个词汇出现的频率&#xff0c;使用wordcloud库按照词汇频率的大小生成词云。 注意&#xff0c;不是使用wordcloud.generate()&#xff0c;这个方法没有按照词汇频率的方式实现词云 停…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

Linux常见面试题汇总

Linux上如何查询某个端口是否被占用&#xff1f; 在Linux上&#xff0c;你可以使用以下几种方法来查询某个端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <端口号>这个命令会列出当前正在运行的所有TCP和UDP端口&#xff0c;并过滤出指…

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁

文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说&#xff0c;代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示&#xff0c;他可能因服务器运营费用而面临破产。据他透…

多线程例子,通过启动三个线程 等三个线程都跑完后打印结果

一个多线程例子&#xff0c;通过启动三个线程 等三个线程都跑完后打印结果 需求描述&#xff1a;开启一个多线程跑3条门店的数据&#xff0c;每个门店都新起一个线程去跑数据&#xff0c;当所有线程跑完后主线程打印结果&#xff0c;记录报错的门店编码 1.线程池配置类 impo…

山西电力市场日前价格预测【2024-02-04】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-04&#xff09;山西电力市场全天平均日前电价为367.56元/MWh。其中&#xff0c;最高日前电价为441.08元/MWh&#xff0c;预计出现在18:30。最低日前电价为324.52元/MWh&#xff0c;预计…

代码混淆技术综述与优化方法

摘要 本文介绍了代码混淆的概念和目的&#xff0c;并提供了Python代码混淆的宏观思路。同时&#xff0c;还介绍了一种在线网站混淆Python代码的方法&#xff0c;并给出了混淆前后的示例代码。 引言 在当今信息时代&#xff0c;软件代码的保护显得尤为重要。代码混淆是一种常…

【数位dp】【动态规划】【KMP】1397. 找到所有好字符串

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 LeetCode1397. 找到所有好字符串 给你两个长度为 n 的字符串 s1 和 s2 &#xff0c;以及一个字符串 evil 。请你返回 好字符串 的数目。 好字符串 的定义为&#x…

蓝桥杯刷题day05——2023

1、题目描述 请求出在12345678 (含) 至 98765432 (含) 中 &#xff0c;有多少个数中完全不包含 2023。 完全不包含 2023是指 无论将这个数的哪些数位移除都不能得到2023。 例如 20322175&#xff0c;33220022 都完全不包含 2023&#xff0c; 而20230415&#xff0c;20193213 …

C#如何实现一个输入框输入,匹配提示数据

在C#中可以使用AutoCompleteStringCollection类来实现输入框的自动完成功能。 首先需要创建一个包含所有候选项的字符串集合&#xff08;List&#xff09;或者从文件、数据库等地方获取到这些候选项。然后将该集合传递给TextBox控件的AutoCompleteCustomSource属性。 下面是一…

装饰你的APP:使用Lottie-Android创建动画效果

装饰你的APP&#xff1a;使用Lottie-Android创建动画效果 1. Lottie-Android简介 Lottie-Android是一个强大的开源库&#xff0c;由Airbnb开发&#xff0c;旨在帮助开发者轻松地在Android应用中添加高质量的动画效果。它基于Adobe After Effects软件中的Bodymovin插件&#x…