aws / aws-cli

Universal Command Line Interface for Amazon Web Services
Other
15.46k stars 4.1k forks source link

aws ec2 import-image doesn't honour the DeviceName in the disk-container file #8808

Closed baelen-git closed 2 months ago

baelen-git commented 2 months ago

Describe the bug

this is the container file I use

[
  {
    "Description": "Intersight Appliance Disk 1",
    "DeviceName": "/dev/sda",
    "Format": "raw",
    "UserBucket": {
        "S3Bucket": "parimi-poc",
        "S3Key": "intersight-appliance-installer-kvm-debug-1.1.0-0.aws.2-1.raw"
    }
  },
  {
    "Description": "Intersight Appliance Disk 2",
    "DeviceName": "/dev/sdb",
    "Format": "raw",
    "UserBucket": {
        "S3Bucket": "parimi-poc",
        "S3Key": "intersight-appliance-installer-kvm-debug-1.1.0-0.aws.2-2.raw"
    }
  },
  {
    "Description": "Intersight Appliance Disk 3",
    "DeviceName": "/dev/sdc",
    "Format": "raw",
    "UserBucket": {
        "S3Bucket": "parimi-poc",
        "S3Key": "intersight-appliance-installer-kvm-debug-1.1.0-0.aws.2-3.raw"
    }
  }

But when I import this with

aws ec2 import-image --description "Intersight Virtual Appliannce 1.1.0-0" --disk-containers "file://containers-raw.json" --platform "Linux"

When the job is finished it shows me this

{
    "ImportImageTasks": [
        {
            "Architecture": "x86_64",
            "Description": "Intersight Virtual Appliannce 1.1.0-0",
            "ImageId": "ami-07d5176d770421bf5",
            "ImportTaskId": "import-ami-03968908552892c3f",
            "LicenseType": "BYOL",
            "Platform": "Linux",
            "SnapshotDetails": [
                {
                    "Description": "Intersight Appliance Disk 1",
                    "DeviceName": "/dev/sda1",
                    "DiskImageSize": 51539607552.0,
                    "Format": "RAW",
                    "SnapshotId": "snap-0573ba92a635d15f3",
                    "Status": "completed",
                    "UserBucket": {
                        "S3Bucket": "parimi-poc",
                        "S3Key": "intersight-appliance-installer-kvm-debug-1.1.0-0.aws.2-1.raw"
                    }
                },
                {
                    "Description": "Intersight Appliance Disk 2",
                    "DeviceName": "/dev/sdf",
                    "DiskImageSize": 26843545600.0,
                    "Format": "RAW",
                    "SnapshotId": "snap-02b1dc3841bc60a87",
                    "Status": "completed",
                    "UserBucket": {
                        "S3Bucket": "parimi-poc",
                        "S3Key": "intersight-appliance-installer-kvm-debug-1.1.0-0.aws.2-2.raw"
                    }
                },
                {
                    "Description": "Intersight Appliance Disk 3",
                    "DeviceName": "/dev/sdg",
                    "DiskImageSize": 139586437120.0,
                    "Format": "RAW",
                    "SnapshotId": "snap-09f0450527dbbce3f",
                    "Status": "completed",
                    "UserBucket": {
                        "S3Bucket": "parimi-poc",
                        "S3Key": "intersight-appliance-installer-kvm-debug-1.1.0-0.aws.2-3.raw"
                    }
                }
            ],
            "Status": "completed",
            "Tags": [],
            "BootMode": "uefi"
        }
    ]
}

As you can see the DeviceName has been changed from:

/dev/sdb to /dev/sdf
/dev/sdc to /dev/sdg

Why is that?

Expected Behavior

I would expect the import command to use the DeviceNames which are specified in the container file

Current Behavior

currently it selects different device names

Reproduction Steps

See the container file in the description and the command to import it

Possible Solution

No response

Additional Information/Context

No response

CLI version used

aws-cli/2.17.14 Python/3.11.9 Linux/6.8.0-1009-aws exe/x86_64.ubuntu.24

Environment details (OS name and version, etc.)

ubuntu@ip-172-31-33-158:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"

tim-finnigan commented 2 months ago

Thanks for reaching out. The import-image command involves a call to the EC2 ImportImage API. Therefore this behavior is happening on the API side rather than directly via the CLI.

This appears to be expected behavior based on this documentation: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html

(Linux instances) Depending on the block device driver of the kernel, the device could be attached with a different name than you specified. For example, if you specify a device name of /dev/sdh, your device could be renamed /dev/xvdh or /dev/hdh. In most cases, the trailing letter remains the same. In some versions of Red Hat Enterprise Linux (and its variants, such as CentOS), the trailing letter could change (/dev/sda could become /dev/xvde). In these cases, the trailing letter of each device name is incremented the same number of times. For example, if /dev/sdb is renamed /dev/xvdf, then /dev/sdc is renamed /dev/xvdg. Amazon Linux creates a symbolic link for the name you specified to the renamed device. Other operating systems could behave differently.

This could maybe be clearer in the documentation — I recommend using the Provide feedback link at the bottom of the API documentation page if you want to share any specific feedback on this, and any documentation updates would automatically get reflected in the CLI command docs.

baelen-git commented 2 months ago

Thank you @tim-finnigan your answer makes sense and I will modify my bootstrap scripts as needed

github-actions[bot] commented 2 months ago

This issue is now closed. Comments on closed issues are hard for our team to see. If you need more assistance, please open a new issue that references this one.