bifrost/setup/create_bootable_image.yaml

48 lines
2.8 KiB
YAML

---
- name: "Extracting the raw disk image"
command: qemu-img convert -O raw "{{http_boot_folder}}/{{deploy_image_filename}}" "{{http_boot_folder}}/{{deploy_image_filename}}.raw"
- name: "Copying Image however with 32k of empty space at the beginning of the file."
command: dd if="{{http_boot_folder}}/{{deploy_image_filename}}.raw" of="{{http_boot_folder}}/{{deploy_image_filename}}.bootimg" seek=64
- name: "Creating Partition Table lining up with the copied file's contents."
shell: echo '32;' | sfdisk "{{http_boot_folder}}/{{deploy_image_filename}}.bootimg" -uB -f
- name: "Allocating one of two loopbacks"
command: losetup -f
register: stored_value_loopback_alpha
- name: "Creating loopback connetion to new image file"
command: losetup "{{stored_value_loopback_alpha.stdout}}" "{{http_boot_folder}}/{{deploy_image_filename}}.bootimg"
- name: "Forcing partition table to be re-read"
command: kpartx -v -a "{{stored_value_loopback_alpha.stdout}}"
# Using second loopback as for some reason /dev/mapper does not translate into a chroot cleanly when devfs is mounted
- name: "Allocating second loopback pointing to the initial partition"
command: losetup -f
register: stored_value_loopback_beta
- name: "Binding second loopback to the first partition"
shell: losetup "{{stored_value_loopback_beta.stdout}}" /dev/mapper/$(echo "{{stored_value_loopback_alpha.stdout}}"|cut -f3 -d '/')p1
# TODO parameterize folder name/location
- name: "Ensuring we have a location to mount the disk to"
file: path=/mnt/bootimg state=directory
- name: "Mounting volume on /mnt/bootimg"
command: mount "{{stored_value_loopback_beta.stdout}}" /mnt/bootimg
- name: "Place grub device file map"
template: src=templates/device.map.j2 of=/mnt/bootimg/boot/grub/device.map
- name: "Binding /dev into /mnt/bootimg/dev"
command: mount --bind /dev /mnt/bootimg/dev
- name: "Make grub configuration"
command: chroot /mnt/bootimg/ grub-mkconfig -o /boot/grub/grub.cfg
- name: "Run the grub-install tool"
command: grub-install --grub-mkdevicemap=/mnt/bootimg/boot/grub/grub.cfg --root-directory=/mnt/bootimg "{{stored_value_loopback_alpha.stdout}}"
- name: "Unlink /dev/bootimg/dev"
command: umount /dev/bootimg/dev
- name: "Unmounting image"
command: umount /dev/bootimg
- name: "Detaching second loop device"
command: losetup -d "{{stored_value_loopback_beta.stdout}}"
- name: "Removing partition map"
command: kpartx -v -d "{{stored_value_loopback_alpha.stdout}}"
- name: "Detaching first loop device"
command: losetup -d "{{stored_value_loopback_alpha.stdout}}"
- name: "Moving image to .oldimg"
command: mv "{{http_boot_folder}}/{{deploy_image_filename}}" "{{http_boot_folder}}/{{deploy_image_filename}}.oldimg"
- name: "Moving new image into place"
command: mv "{{http_boot_folder}}/{{deploy_image_filename}}.bootimg" "{{http_boot_folder}}/{{deploy_image_filename}}"