Files
bifrost/playbooks/roles/bifrost-create-bootable-image/tasks/create_bootable_image.yml
Riccardo Pittau 0eee2d0483 ansible-lint: fix error 206
Variables should have spaces before and after: {{ var_name }}

Change-Id: I7e8616e835bbbe7500b0aae5b1b985ef5d471403
2020-08-31 16:11:27 +02:00

75 lines
3.7 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 # noqa 306
- 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: |
set -o pipefail
losetup "{{ stored_value_loopback_beta.stdout }}" /dev/mapper/$(echo "{{ stored_value_loopback_alpha.stdout }}" | cut -f3 -d '/')p1
executable: /bin/bash
# TODO parameterize folder name/location
- name: "Ensure we have a location to mount the disk to"
file: path=/mnt/bootimg state=directory
# NOTE(dtantsur): skipping ansible-lint 303 because the mount module does not
# support temporary mounts: https://github.com/ansible-collections/ansible.posix/issues/84
- name: "Mount volume on /mnt/bootimg"
command: mount "{{ stored_value_loopback_beta.stdout }}" /mnt/bootimg # noqa 303
- name: "Bind /sys into /mnt/bootimg/sys"
command: mount -t sysfs sysfs /mnt/bootimg/sys # noqa 303
- name: "Bind /proc into /mnt/bootimg/proc"
command: mount -t proc proc /mnt/bootimg/proc # noqa 303
- name: "Bind /dev into /mnt/bootimg/dev"
command: mount --bind /dev /mnt/bootimg/dev # noqa 303
- 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 }}"