yum_repository模块 用于配置yum file:指定文件名
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"
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
cat /etc/yum.repos.d/myrepo.repo 查看yum
yum 模块 如安装 升级 卸载 name: 包名 state:状态 present表示安装 latest表示安装或升级 absent:表示卸载
ansible webservers -m yum -a "name=tar state=present" 在webservers组的主机上安装tar
ansible webservers -m yum -a "name=wget,net-tools" 在webservers组的主机上安装wget,net-tools
ansible webservers -m yum -a "name=wget state=absent" 在webservers组的主机上卸载wget
service模块 用于控制服务 如启动 关闭 重启 开机自启 name:服务名 state:started表示启动 stopped表示关闭 restarted表示重启
ansible webservers -m service -a "name=nginx state=started enabled=yes" 在组的主机上启动nginx服务&开机自启
lvg模块 创建 删除卷组 修改卷组大小 vg:定义卷组名字 pvs:哪个物理卷构成的
ansible web1 -m yum -a "name=lvm2" 在web1下载lvm2软件 不然用不了lvg模块
ansible web1 -m lvg -a "vg=myvg pvs=/dev/vdb1" 在web1上创建名为myvg的卷组 该卷组由/dev/vdb1组成
ansible web1 -m lvg -a "vg=myvg pvs=/dev/vdb1,/dev/vdb2"扩容卷组
ansible web1 -a "vgs" 查看web1的卷组
lvol模块 创建 删除逻辑卷 修改逻辑卷大小 vg:指定卷组 lv:创建的逻辑卷名自 size:逻辑卷的大小
ansible web1 -m lvol -a "vg=myvg lv=mylv size=2G"在web1上创建名为mylv的逻辑卷 大小为2G
ansible web1 -a "lvs" 查看web1主机上的逻辑卷
ansible web1 -m lvol -a "vg=myvg lv=mylv size=4G"mylv扩容至4GB 没有这个逻辑卷创建 有这个逻辑卷扩容
ansible web1 -m lvol -a "vg=myvg lv=mylv size=10G" 扩容至10GB 注意不要超过卷组的大小
filesystem模块 用于格式化 也就是创建文件系统 fstype:指定文件系统类型 dev:指定要格式化的设备可以是分区,逻辑卷
ansible web1 -m filesystem -a "fstype=xfs dev=/dev/myvg/mylv"在web1上把/dev/myvg/mylv格式化为xfs dev设备一定不要打错
ansible web1 -a "blkid /dev/myvg/mylv" 查看格式化结果
mount模块 用于挂载文件系统 path:挂载点 src:待挂载设备 fstype:文件系统类型 state:mounted表示永久挂载
ansible web1 -m mount -a "path=/data src=/dev/myvg/mylv state=mounted fstype=xfs" 在web1上把/d/v/l永久挂载到/data
ansible web1 -a "tail -1 /etc/fstab" 查看
ansible web1 -a "df -h /data/" 查看
ansible web1 -m mount -a "path=/data state=absent" 卸载/dev/myvg/mylv
ansible web1 -m lvol -a "lv=mylv state=absent vg=myvg force=yes" 在web1上强制删除/dev/myvg/mylv force是强制
ansible web1 -m lvg -a "vg=myvg state=absent" 在web1上 删除myvg卷组
Playbook剧本 常用于复杂任务的管理 以及管理经常要完成的任务 playbook是一个文件 该文件需要通过yaml格式进行书写
yaml语法规范
1 yaml文件的文件名 一般以yml或yaml作为扩展名
2 文件一般以---作为第一行 不是必须但是常用
3 键值对(变量)使用冒号:表示 冒号后面必须有空格
4 数组(能够存储一堆值的变量)使用-表示 后面必须有空格
5 相同的层级必须有相同的缩进 每一级缩进建议两个空格
6 全文不能使用tab 必须使用空格
配置vim适应yaml语法
vim ~/.vimrc
set ai 设置自动缩进
set ts=2 设置按TAB键 缩进2个空格
set et 将TAB转换成相应个数的空格
set number 显示行号
set cursorline 高亮当前所在行
规范的写法如下:
---
- name: test network # play的名字,可选项
hosts: all # 作用于所有的主机
tasks: # 任务
- name: test via ping # 第1个任务的名字,可选项
ping: # 第1个任务使用的模块
在dbs组的主机和web1上创建/tmp/demo目录 权限是0755 将控制段/etc/hosts拷贝到目标主机的/tmp/demo中
vim fileop.yml
---
- name: create dir and copy file
hosts: dbs,web1 # 这里的名称,必须出现在主机清单文件中
tasks:
- name: create dir
file:
path: /tmp/demo
state: directory
mode: '0755'
- name: copy file
copy:
src: /etc/hosts
dest: /tmp/demo/hosts
最后执行剧本 ansible-playbook fileop.yml
在webservers组的主机上 创建用户bob 附加组是adm 在db1主机上创建/tmp/hi.txt 其内容是Hello World
[root@pubserver ansible]# vim two.yml
---
- name: create user
hosts: webservers
tasks:
- name: create bob
user:
name: bob
groups: adm
- name: create file
hosts: db1
tasks:
- name: make file
copy:
dest: /tmp/hi.txt
content: "Hello World"
执行脚本 ansible-playbook two.yml
| 和 > 的区别 |保留换行符 > 把多行合并一行
通过copy模块创建/tmp/1.txt 文件中有两行内容 分别是helloworld 和 nihao
[root@pubserver ansible]# vim f1.yml
---
- name: play 1
hosts: webservers
tasks:
- name: mkfile 1.txt
copy:
dest: /tmp/1.txt
content: |
Hello World!
ni hao.
执行 ansible-playbook f1.yml
在webservers组中的主机上创建john用户 他的uid是1040 主组是daemon 密码是123
[root@pubserver ansible]# vim user_john.yml
---
- name: create user
hosts: webservers
tasks:
- name: create user john
user:
name: john
uid: 1040
group: daemon
password: "{{'123'|password_hash('sha512')}}" 用sha512加密算法加密 {}前面没有东西时需要加”“引起来
执行剧本 ansible-playbook user_john.yml
在webservers组的主机上删除用户john
[root@pubserver ansible]# vim del_john.yml
---
- name: delete user
hosts: webservers
tasks:
- name: delete user john
user:
name: john
state: absent
[root@pubserver ansible]# ansible-playbook del_john.yml
硬盘管理 常用的分区表类型有:MBR(主引导记录) GPT(GUID分区表)
MBR最多支持4个主分区 或三个主分区加一个扩展分区 最大支持2.2TB左右的硬盘
GPT最多支持128个主分区 支持大硬盘
Parted模块 用于硬盘分区管理 选项 device:待分区设备 number:分区编号 state:present创建 absent删除 part_start: 分区起始位置 不写表示从开头 part_end:结束位置 不写表示到结尾
在web1主机上 对/dev/vdc进行分区 创建一个1GB的主分区
[root@pubserver ansible]# vim disk.yml
---
- name: disk manage
hosts: web1
tasks:
- name: create a partition
parted:
device: /dev/vdc 给谁分区
number: 1 第几个分区
state: present 状态:创建分区
part_end: 1GiB 从1G的位置结束
[root@pubserver ansible]# ansible-playbook disk.yml 执行剧本
[root@pubserver ansible]# ansible web1 -a "lsblk" 查看结果
继续编辑disk.yml 对/dev/vdc进行分区 创建一个新的5GB的主分区
[root@pubserver ansible]# vim disk.yml
... ...
- name: add a new partition
parted:
device: /dev/vdc
number: 2
state: present
part_start: 1GiB 从1G开始
part_end: 6GiB 到6
[root@pubserver ansible]# ansible-playbook disk.yml 执行剧本
继续编辑disk.yml 创建名为my_vg的卷组 它由上面创建的vdc1和vdc2构成
[root@pubserver ansible]# vim disk.yml
... ...
- name: create my_vg
lvg:
vg: my_vg
pvs: /dev/vdc1,/dev/vdc2
继续编辑disk.yml 在my_vg卷组上创建名为my_lv的逻辑卷 大小为1G
[root@pubserver ansible]# vim disk.yml
... ...
- name: create my_lv
lvol:
vg: my_vg
lv: my_lv
size: 1G
继续编辑disk.yml 格式化my_lv为ext4
[root@pubserver ansible]# vim disk.yml
... ...
- name: mkfs my_lv
filesystem:
dev: /dev/my_vg/my_lv
fstype: ext4
继续编辑disk.yml 将my_lv挂载到/data
[root@pubserver ansible]# vim disk.yml
... ...
- name: mount my_lv
mount:
path: /data
src: /dev/my_vg/my_lv
fstype: ext4
state: mounted