Ansible 在服务器中安装多个磁盘

问题描述 投票:0回答:2

我有下面的代码将服务器中的单个磁盘映射到挂载点。但是,在我的服务器上,我有 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
到上面的脚本。

ansible ansible-2.x mount
2个回答
0
投票

实现的方法之一是通过字典列表并遍历它们:

  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 }}"

0
投票

这是一种可能的解决方案。这主要是一个伪例子。实际上调用模块没有经过测试,所以你可能需要调整一些参数。但是您应该了解总体思路。

如果需要请注意:在下面的示例中,

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
© www.soinside.com 2019 - 2024. All rights reserved.