70 lines
3.4 KiB
YAML
70 lines
3.4 KiB
YAML
# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
---
|
|
- name: "Extract the raw disk image"
|
|
command: qemu-img convert -O raw "{{deploy_image}}" "{{deploy_image}}.raw"
|
|
- name: "Copy image however with 32k of empty space at the beginning of the file."
|
|
command: dd if="{{deploy_image}}.raw" of="{{deploy_image}}.bootimg" seek=64
|
|
- name: "Create partition table lining up with the copied file's contents."
|
|
shell: echo '32;' | sfdisk "{{deploy_image}}.bootimg" -uB -f
|
|
- name: "Allocate one of two loopbacks"
|
|
command: losetup -f
|
|
register: stored_value_loopback_alpha
|
|
- name: "Create loopback connetion to new image file"
|
|
command: losetup "{{stored_value_loopback_alpha.stdout}}" "{{deploy_image}}.bootimg"
|
|
- name: "Force 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: "Allocate second loopback pointing to the initial partition"
|
|
command: losetup -f
|
|
register: stored_value_loopback_beta
|
|
- name: "Bind 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: "Ensure we have a location to mount the disk to"
|
|
file: path=/mnt/bootimg state=directory
|
|
- name: "Mount volume on /mnt/bootimg"
|
|
command: mount "{{stored_value_loopback_beta.stdout}}" /mnt/bootimg
|
|
- name: "Bind /sys into /mnt/bootimg/sys"
|
|
command: mount -t sysfs sysfs /mnt/bootimg/sys
|
|
- name: "Bind /proc into /mnt/bootimg/proc"
|
|
command: mount -t proc proc /mnt/bootimg/proc
|
|
- name: "Bind /dev into /mnt/bootimg/dev"
|
|
command: mount --bind /dev /mnt/bootimg/dev
|
|
- name: "Disable Grub Prober"
|
|
shell: echo "GRUB_DISABLE_OS_PROBER=true" >>/etc/default/grub
|
|
- name: "Disable Grub Prober"
|
|
shell: echo 'GRUB_TERMINAL="serial console"' >>/etc/default/grub
|
|
- name: "Run the grub-install tool"
|
|
command: chroot /mnt/bootimg grub-install --boot-directory=/boot --modules="biosdisk part_msdos" "{{stored_value_loopback_alpha.stdout}}"
|
|
- name: "Unlink /dev/bootimg/dev"
|
|
command: umount /mnt/bootimg/dev
|
|
- name: "Unlink /dev/bootimg/proc"
|
|
command: umount /mnt/bootimg/proc
|
|
- name: "Unlink /dev/bootimg/sys"
|
|
command: umount /mnt/bootimg/sys
|
|
- name: "Unmount image"
|
|
command: umount /mnt/bootimg
|
|
- name: "Detach second loop device"
|
|
command: losetup -d "{{stored_value_loopback_beta.stdout}}"
|
|
- name: "Remove partition map"
|
|
command: kpartx -v -d "{{stored_value_loopback_alpha.stdout}}"
|
|
- name: "Detach first loop device"
|
|
command: losetup -d "{{stored_value_loopback_alpha.stdout}}"
|
|
- name: "Move image to .oldimg"
|
|
command: mv "{{deploy_image}}" "{{deploy_image}}.oldimg"
|
|
- name: "Move new image into place"
|
|
command: mv "{{deploy_image}}.bootimg" "{{deploy_image}}"
|