如何使用 Ansible 创建新分区

How to create a new partition with Ansible

当我在命令行上 运行 它工作正常:

 echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb

但在 Ansible 中它不想在 shell 中 运行:

 - name: partition new disk
   shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb

它不会返回错误,但也不会创建分区。

我检查过 Ansible 和 LVM 不能满足我的需要。

有什么建议吗?

默认情况下,Ansible 执行 /bin/sh shell.
例如,如果 /bin/sh 链接到 dash,它的构建 echobash 或 GNU echo 中的不同;所以你最终将 -e 个字符输入 fdisk。

尝试:

- name: partition new disk
  shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
  args:
    executable: /bin/bash

或:

- name: partition new disk
  shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb

使用 Ansible 2.3 及更高版本,您可以使用 parted module 从块设备创建分区。 例如:

 - parted:
     device: /dev/sdb
     number: 1
     flags: [ lvm ]
     state: present

要格式化分区,只需使用 filesystem module,如下所示:

 - filesystem:
     fstype: ext2
     dev: /dev/sdb1

要将分区挂载到 /work 文件夹,只需使用 mount module,如下所示:

- mount:
    fstype: ext2
    src: /dev/sdb1
    path: /work
    state: mounted

如何将所有空闲 space 分配到一个新分区并将其添加到 Ansible 中的 LVM

  • 如果您使用的是 LVM,请查看此内容!

  • 如果您想使用设备的所有免费space,请看这里!

从设备 /dev/sda/dev/sda1 上的现有分区开始 {{ volumeGroup }}

使用以下方法在 /dev/sda 的空闲 space 中创建分区 /dev/sda2,然后将新分区添加到现有的 {{ volumeGroup }}

- name: "Create partitions on devices"    
  block:   
    - name: install parted
      package:
        name: parted
        state: present 
        
    - name: "Read device information /dev/sda"
      parted: 
        device: "/dev/sda"
        unit: MiB
      register: device_info
    
    - name: "Add new partition /dev/sda2"
      parted: 
        device: "/dev/sda"
        number: "2"
        part_type: primary
        flags: [ lvm ]
        state: present
        part_end: "100%"
        part_start: "{{ device_info.partitions[0].end + 1}}MiB" 
        
    - name: "Add device to exising volume group {{ volumeGroup }}."
      lvg:
        vg: "{{ volumeGroup }}"
        pvs: "/dev/sda1,/dev/sda2"
 

在我的系统上帮助翻倍"n"

echo -e "\nn\np\n1\n\n\nw" | fdisk /dev/sdb