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