How to create a new partition with Ansible
With Ansible 2.3 and above, you can use parted
module to create partitions from a block device.For example:
- parted: device: /dev/sdb number: 1 flags: [ lvm ] state: present
To format the partition just use filesystem
module as shown below:
- filesystem: fstype: ext2 dev: /dev/sdb1
To mount the partition to, let's say, /work
folder just use mount
module as shown below:
- mount: fstype: ext2 src: /dev/sdb1 path: /work state: mounted
By default, Ansible executes /bin/sh
shell.
For example, if /bin/sh
is linked to dash
, it's built echo
is different to the one in bash
or GNU echo
; so you end up with -e
characters fed into fdisk.
Try:
- name: partition new disk shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb args: executable: /bin/bash
Or:
- name: partition new disk shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
How to allocate all free space to a new partition and add it to LVM in Ansible
If you're using LVM, look into this!
If you want to use all the free space of the device, look into this!
Starting with a device /dev/sda
and an existing partition on /dev/sda1
in {{ volumeGroup }}
.
Use the following approach to create a partition /dev/sda2
in the free space of /dev/sda
and to subsequently add the new partition to the existing {{ 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"