canonical / canonical/cloud-init

Azure: ubuntu minimal images getting warnings due to missing gdisk (/usr/sbin/sgdisk)

Open
#4,907 0 comments 1 reaction 0 assignees View on GitHub
bug
Dominant language
Python
Stars
3.8k
Forks
1.1k
Avg merge
3d 8h
Merged PRs (30d)
22

Description

# Bug report
Ubuntu Minimal Azure images do not contain gdisk package (and resulting sgdisk), resulting in failure to partition /dev/sda.
This results in a warning in cloud-init logs `Failed to partitioning operation` and the inability to partition /dev/sda.

## Steps to reproduce the problem

## Environment details
- Cloud-init version: 24.1~
- Operating System Distribution: Ubuntu Noble minimal
- Cloud provider, platform or installer type: Azure

## cloud-init logs
```
2024-02-19 03:16:07,680 - cc_disk_setup.py[DEBUG]: Checking if device layout matches
2024-02-19 03:16:07,680 - subp.py[DEBUG]: Running command [None, '-p', '/dev/sda'] with allowed return codes [0] (shell=False, capture=True)
2024-02-19 03:16:07,680 - util.py[DEBUG]: Creating partition on /dev/disk/cloud/azure_resource took 0.022 seconds
2024-02-19 03:16:07,680 - util.py[WARNING]: Failed partitioning operation
Error running partition command on /dev/sda
'NoneType' object has no attribute 'encode'
2024-02-19 03:16:07,684 - util.py[DEBUG]: Failed partitioning operation
Error running partition command on /dev/sda
'NoneType' object has no attribute 'encode'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_disk_setup.py", line 491, in check_partition_gpt_layout
out, _err = subp.subp(prt_cmd, update_env=LANG_C_ENV)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 244, in subp
bytes_args = [
^
File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 245, in
x if isinstance(x, bytes) else x.encode("utf-8") for x in args
^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'encode'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_disk_setup.py", line 136, in handle
util.log_time(
File "/usr/lib/python3/dist-packages/cloudinit/util.py", line 2838, in log_time
ret = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_disk_setup.py", line 829, in mkpart
if check_partition_layout(table_type, device, layout):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_disk_setup.py", line 538, in check_partition_layout
found_layout = check_partition_gpt_layout(device, layout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/cloudinit/config/cc_disk_setup.py", line 493, in check_partition_gpt_layout
raise RuntimeError(
RuntimeError: Error running partition command on /dev/sda
'NoneType' object has no attribute 'encode'
2024-02-19 03:16:07,687 - cc_disk_setup.py[DEBUG]: setting up filesystems: [{'filesystem': 'ext4', 'device': 'ephemeral0.1'}]
2024-02-19 03:16:07,687 - cc_disk_setup.py[DEBUG]: ephemeral0.1 is mapped to disk=/dev/disk/cloud/azure_resource part=1
2024-02-19 03:16:07,687 - cc_disk_setup.py[DEBUG]: Creating new filesystem.
```

Contributor guide

Open the contributing guide

Research direction

Start by reading cloud-init/config/cc_disk_setup.py, especially check_partition_gpt_layout and the subp.subp call shown in the traceback. Reproduce the disk setup on an Ubuntu Noble minimal Azure image and trace how the missing /usr/sbin/sgdisk is handled. Done should mean partitioning no longer fails or emits the reported warning when gdisk is absent.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, python, ubuntu
Domain
cloud, infrastructure
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.