attempting to preserve disk curtin expects PTTYPE in blkid output

Bug #1524031 reported by Ryan Harper
10
This bug affects 1 person
Affects Status Importance Assigned to Milestone
curtin
Medium
Unassigned
curtin (Ubuntu)
Undecided
Unassigned
Xenial
Undecided
Unassigned

Bug Description

[Impact]

 * On a Trusty host, if users enable storage disk preserve feature,
   the use of blkid expects PTTYPE value in the output, however, this is
   not present in Trusty blkid output. This prevents Trusty hosts from
   preserving existing partitions.

   Curtin has been updated to fallback to using parted to determine how to
   preserve existing partitions on disks when directed.

[Test Case]

 * Install proposed curtin package and deploy in a Trusty ephemeral
   environment with the following storage configuration:

   storage:
    version: 1
    config:
      - id: vdg
        model: Unknown Model
        preserve: true
        ptable: gpt
        serial: 64bddb21-61f3-4869-8
        type: disk
        wipe: superblock

  PASS: Successfully deploy image while preserving the original partition
        table.

  FAIL: Deployment fails with the following error:

 line 530, in disk_handler
  out.splitlines()))[0].split("=")[-1]
 IndexError: list index out of range
 list index out of range

[Regression Potential]

 * No known other failures when using parted as replacement for blkid
   partition data.

[Original Description]
On a trusty host, this storage configuration breaks:

storage:
  version: 1
  config:
    - id: vdg
      model: Unknown Model
      preserve: true
      ptable: gpt
      serial: 64bddb21-61f3-4869-8
      type: disk
      wipe: superblock

like this:

Running command ['partprobe', '/dev/vdg'] with allowed return codes [0, 1] (shell=False, capture=False)
Running command ['udevadm', 'settle'] with allowed return codes [0] (shell=False, capture=False)
Running command ['blkid', '-o', 'export', '/dev/vdg'] with allowed return codes [0] (shell=False, capture=True)
An error occured handling 'vdg': IndexError - list index out of range
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/curtin/commands/main.py", line 208, in main
    ret = args.func(args)
  File "/usr/lib/python3/dist-packages/curtin/commands/block_meta.py", line 63, in block_meta
    meta_custom(args)
  File "/usr/lib/python3/dist-packages/curtin/commands/block_meta.py", line 1208, in meta_custom
    handler(command, storage_config_dict)
  File "/usr/lib/python3/dist-packages/curtin/commands/block_meta.py", line 530, in disk_handler
    out.splitlines()))[0].split("=")[-1]
IndexError: list index out of range
list index out of range

From this code here:

        # Check state of current ptable
        try:
            (out, _err) = util.subp(["blkid", "-o", "export", disk],
                                    capture=True)
        except util.ProcessExecutionError:
            raise ValueError("disk '%s' has no readable partition table or \
                cannot be accessed, but preserve is set to true, so cannot \
                continue")
        current_ptable = list(filter(lambda x: "PTTYPE" in x,
                                     out.splitlines()))[0].split("=")[-1]

And the output of blkid -o export /dev/vdg on trusty instance is:

# blkid -o export /dev/vdg
UUID=ef30955b-8aa0-453f-a37d-d631a09a6f7c
UUID_SUB=9a21ae23-6f14-405d-9e9a-8955855132d5
TYPE=btrfs

Related branches

Scott Moser (smoser)
Changed in curtin:
status: New → Confirmed
importance: Undecided → Medium
Changed in curtin:
status: Confirmed → Fix Committed
Ryan Harper (raharper)
description: updated
Revision history for this message
Andy Whitcroft (apw) wrote : Please test proposed package

Hello Ryan, or anyone else affected,

Accepted curtin into xenial-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/curtin/0.1.0~bzr425-0ubuntu1~16.04.1 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, and change the tag from verification-needed to verification-done. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed. In either case, details of your testing will help us make a better decision.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

tags: added: verification-needed
Andy Whitcroft (apw)
Changed in curtin (Ubuntu):
status: New → Fix Released
Changed in curtin (Ubuntu Xenial):
status: New → Fix Committed
Revision history for this message
Ryan Harper (raharper) wrote :

I've tested the proposed package on Xenial and it handles preserve partitions properly.

tags: added: verification-done
removed: verification-needed
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package curtin - 0.1.0~bzr425-0ubuntu1~16.04.1

---------------
curtin (0.1.0~bzr425-0ubuntu1~16.04.1) xenial-proposed; urgency=medium

  [ Scott Moser ]
  * debian/new-upstream-snapshot: add writing of debian changelog entries.

  [ Ryan Harper ]
  * New upstream snapshot.
    - unittest,tox.ini: catch and fix issue with trusty-level mock of open
    - block/mdadm: add option to ignore mdadm_assemble errors (LP: #1618429)
    - curtin/doc: overhaul curtin documentation for readthedocs.org
      (LP: #1351085)
    - curtin.util: re-add support for RunInChroot (LP: #1617375)
    - curtin/net: overhaul of eni rendering to handle mixed ipv4/ipv6 configs
    - curtin.block: refactor clear_holders logic into block.clear_holders and
      cli cmd
    - curtin.apply_net should exit non-zero upon exception. (LP: #1615780)
    - apt: fix bug in disable_suites if sources.list line is blank.
    - vmtests: disable Wily in vmtests
    - Fix the unittests for test_apt_source.
    - get CURTIN_VMTEST_PARALLEL shown correctly in jenkins-runner output
    - fix vmtest check_file_strippedline to strip lines before comparing
    - fix whitespace damage in tests/vmtests/__init__.py
    - fix dpkg-reconfigure when debconf_selections was provided.
      (LP: #1609614)
    - fix apt tests on non-intel arch
    - Add apt features to curtin. (LP: #1574113)
    - vmtest: easier use of parallel and controlling timeouts
    - mkfs.vfat: add force flag for formating whole disks (LP: #1597923)
    - block.mkfs: fix sectorsize flag (LP: #1597522)
    - block_meta: cleanup use of sys_block_path and handle cciss knames
      (LP: #1562249)
    - block.get_blockdev_sector_size: handle _lsblock multi result return
      (LP: #1598310)
    - util: add target (chroot) support to subp, add target_path helper.
    - block_meta: fallback to parted if blkid does not produce output
      (LP: #1524031)
    - commands.block_wipe: correct default wipe mode to 'superblock'
    - tox.ini: run coverage normally rather than separately
    - move uefi boot knowledge from launch and vmtest to xkvm

 -- Ryan Harper <email address hidden> Mon, 03 Oct 2016 13:43:54 -0500

Changed in curtin (Ubuntu Xenial):
status: Fix Committed → Fix Released
Revision history for this message
Martin Pitt (pitti) wrote : Update Released

The verification of the Stable Release Update for curtin has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Revision history for this message
Scott Moser (smoser) wrote : Fixed in Curtin 17.1

This bug is believed to be fixed in curtin in 17.1. If this is still a problem for you, please make a comment and set the state back to New

Thank you.

Changed in curtin:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers