我有下面的代码将服务器中的单个磁盘映射到挂载点。但是,在我的服务器上,我有 5 个磁盘,我想将这些磁盘添加到同一个剧本中,而不必一张一张地添加。
- hosts: ip_of_host
vars:
disk_dev: "/dev/sdb"
mount_path: "/mnt/daily_backup"
gather_facts: true
become: true # Get root privileges
tasks:
- name: Use entire disk
community.general.parted:
device: "{{ disk_dev }}"
number: 1
name: data
state: present
label: gpt
unit: MiB
part_start: 0%
part_end: 100%
- name: Define ext file system for the disk
community.general.filesystem:
fstype: ext4
dev: "{{ disk_dev }}1"
- name: Create the mount directory
ansible.builtin.file:
path: "{{ mount_path }}"
state: directory
mode: '0755'
- name: Perform the mounting on the mount device
ansible.builtin.mount:
fstype: ext4
src: "{{ disk_dev }}1"
path: "{{ mount_path }}"
state: mounted
那么我怎样才能添加更多的磁盘让我们说
/dev/sdc
, /dev/sdd
, /dev/sde
到上面的脚本。
实现的方法之一是通过字典列表并遍历它们:
vars:
disks:
- disk_dev: "/dev/sdb"
mount_path: "/mnt/daily_backup"
- disk_dev: "/dev/sdc"
mount_path: "/mnt/mount_seconddisk"
然后:
- name: Perform the mounting on the mount device
ansible.builtin.mount:
fstype: ext4
src: "{{ item.disk_dev }}"
path: "{{ item.mount_path }}"
state: mounted
loop: "{{ disks }}"
这是一种可能的解决方案。这主要是一个伪例子。实际上调用模块没有经过测试,所以你可能需要调整一些参数。但是您应该了解总体思路。
d
是 default
的别名
创建一个文件
mount_disk_each.yml
,您可以在其中放置您的个人任务并进行一些重构:
- name: Use entire disk
community.general.parted:
device: "{{ disk.dev }}"
number: "{{ disk.part_number | d(1) }}"
name: "{{ disk.name }}"
state: present
label: "{{ disk.label | d('gpt') }}"
unit: "{{ disk.unit | d('MiB') }}"
part_start: "{{ disk.start | d('0%') }}"
part_end: "{{ dist.end | d('100%') }}"
- name: Define ext file system for the disk
community.general.filesystem:
fstype: "{{ disk.fstype | d('ext4') }}"
dev: "{{ disk.dev }}{{ disk.part_number | d(1) }}"
- name: Create the mount directory
ansible.builtin.file:
path: "{{ disk.mount_path }}"
state: directory
mode: '0755'
- name: Perform the mounting on the mount device
ansible.builtin.mount:
fstype: "{{ disk.fstype | d('ext4') }}"
src: "{{ disk.dev }}{{ disk.part_number | d(1) }}"
path: "{{ disk.mount_path }}"
state: mounted
然后从您的主剧本中循环调用该文件,为每个设备传递正确的信息。
备注:
disks
变量,而不是下面的播放变量。请参阅如何建立库存- name: mount needed disks
hosts: localhost
vars:
disks:
- dev: /dev/sda
name: data
mount_path: /usr/var/data
- dev: /dev/sdb
name: cache
label: <some_other_label>
unit: GiB
part_end: 50%
fstype: xfs
mount_path: /usr/var/cache
- dev: /dev/sdb
part_number: 2
name: backup
part_start: 50%
part_end: 100%
mount_path: /usr/var/backup
tasks:
- name: Create and mount each partition
ansible.builtin.include_tasks: mount_disk_each.yml
loop: "{{ disks }}"
loop_control:
loop_var: disk