oxidecomputer / oxidecomputer/propolis

wish instance-ensure body was not logged in a completely unusable way

Open
#1,057 3 comments 0 reactions 1 assignee View on GitHub

@hawkw is already working on this.

Since Feb 11, 2026.

bug
Dominant language
Rust
Stars
270
Forks
42
Avg merge
4d 5h
Merged PRs (30d)
6

Description

when propolis-server receives an InstanceEnsure request, we appear to log it by...formatting the Rust struct as a string, and then debug-printing the string, so that all of the newlines in the thing that ultimately gets logged are escaped, but the quoted strings inside the fmt::Debug output are not escaped, meaning that it's really annoying to actually turn the weird illegible trash that gets logged in one giant line into something that a person can actually reasonably interpret.. for example, in my terminal, it looks like this:

Image

here is the actual ASCII text of the log line but again, be advised that this is going to be one extremely long line:

21:24:58.187Z INFO propolis-server (vm_state_driver): initializing new VM
    bootrom = /opt/oxide/propolis-server/blob/OVMF_CODE.fd
    properties = InstanceProperties {\n    id: 713603af-116a-42fc-bb75-e34734d4452d,\n    name: "my-computer",\n    description: "Omicron-managed VM",\n    metadata: InstanceMetadata {\n        silo_id: 7bd7623a-68ed-4636-8ecb-b59e3b068787,\n        project_id: 50d839b4-2d18-49c0-94cf-7d6883e00178,\n        sled_id: dd83e75a-1edf-4aa1-89a0-cd8b2091a7cd,\n        sled_serial: "BRM42220016",\n        sled_revision: 6,\n        sled_model: "913-0000019",\n    },\n}
    spec = Spec {\n    board: Board {\n        cpus: 2,\n        memory_mb: 8192,\n        chipset: I440Fx(\n            I440Fx {\n                enable_pcie: false,\n            },\n        ),\n        guest_hv_interface: Bhyve,\n    },\n    cpuid: CpuidSet {\n        map: CpuidMap(\n            {\n                0: Absent(\n                    CpuidValues {\n                        eax: 13,\n                        ebx: 1752462657,\n                        ecx: 1145913699,\n                        edx: 1769238117,\n                    },\n                ),\n                1: Absent(\n                    CpuidValues {\n                        eax: 10489617,\n                        ebx: 2048,\n                        ecx: 4141363715,\n                        edx: 126614527,\n                    },\n                ),\n                5: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                6: Absent(\n                    CpuidValues {\n                        eax: 4,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                7: Present(\n                    {\n                        0: CpuidValues {\n                            eax: 0,\n                            ebx: 563610537,\n                            ecx: 1536,\n                            edx: 16,\n                        },\n                        1: CpuidValues {\n                            eax: 0,\n                            ebx: 0,\n                            ecx: 0,\n                            edx: 0,\n                        },\n                    },\n                ),\n                13: Present(\n                    {\n                        0: CpuidValues {\n                            eax: 7,\n                            ebx: 832,\n                            ecx: 832,\n                            edx: 0,\n                        },\n                        1: CpuidValues {\n                  eax: 7,\n                            ebx: 832,\n                            ecx: 0,\n                            edx: 0,\n                        },\n                        2: CpuidValues {\n                            eax: 256,\n                            ebx: 576,\n                            ecx: 0,\n                            edx: 0,\n                        },\n                    },\n                ),\n                2147483648: Absent(\n                    CpuidValues {\n                        eax: 2147483681,\n                        ebx: 1752462657,\n                        ecx: 1145913699,\n                        edx: 1769238117,\n                    },\n                ),\n                2147483649: Absent(\n                    CpuidValues {\n                        eax: 10489617,\n                        ebx: 1073741824,\n                        ecx: 1145045497,\n                        edx: 634649599,\n                    },\n                ),\n                2147483650: Absent(\n                    CpuidValues {\n   eax: 541347137,\n                        ebx: 1129926725,\n                        ecx: 825702176,\n                        edx: 908087347,\n                    },\n                ),\n                2147483651: Absent(\n                    CpuidValues {\n                        eax: 1866673460,\n                        ebx: 1344300402,\n                        ecx: 1701015410,\n                        edx: 1919906675,\n                    },\n                ),\n                2147483652: Absent(\n                    CpuidValues {\n                        eax: 538976288,\n                        ebx: 538976288,\n                        ecx: 538976288,\n                        edx: 2105376,\n                    },\n                ),\n                2147483653: Absent(\n                    CpuidValues {\n                        eax: 4282449728,\n                        ebx: 4282449728,\n                        ecx: 537395520,\n                        edx: 537395520,\n                    },\n                ),\n                2147483654: Absent(\n                    CpuidValues {\n                        eax: 1207968256,\n                        ebx: 1744847360,\n                        ecx: 33579328,\n                        edx: 134254912,\n                    },\n                ),\n                2147483655: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 256,\n                    },\n                ),\n                2147483656: Absent(\n                    CpuidValues {\n                        eax: 12336,\n                        ebx: 5,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483658: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483673: Absent(\n                    CpuidValues {\n                        eax: 4030787648,\n                 ebx: 4030726144,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483674: Absent(\n                    CpuidValues {\n                        eax: 6,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483675: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483676: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483677: Present(\n                    {\n                        0: CpuidValues {\n                            eax: 289,\n                            ebx: 63,\n     ecx: 0,\n                            edx: 0,\n                        },\n                        1: CpuidValues {\n                            eax: 323,\n                            ebx: 63,\n                            ecx: 0,\n                            edx: 0,\n                        },\n                        2: CpuidValues {\n                            eax: 355,\n                            ebx: 63,\n                            ecx: 0,\n                            edx: 0,\n                        },\n                    },\n                ),\n                2147483678: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 256,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483679: Absent(\n                    CpuidValues {\n                        eax: 0,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n                2147483681: Absent(\n                    CpuidValues {\n                        eax: 69,\n                        ebx: 0,\n                        ecx: 0,\n                        edx: 0,\n                    },\n                ),\n            },\n        ),\n        vendor: Amd,\n    },\n    disks: {\n        Name(\n            "70208419-564e-44a7-b1d5-6df61797d11f:device",\n        ): Disk {\n            device_spec: Nvme(\n                NvmeDisk {\n                    backend_id: Uuid(\n                        70208419-564e-44a7-b1d5-6df61797d11f,\n                    ),\n                    pci_path: PciPath {\n                        bus: 0,\n                        device: 16,\n                        function: 0,\n                    },\n                    serial_number: [\n                        109,\n                        121,\n                        45,\n                        99,\n                        111,\n                        109,\n                        112,\n                        117,\n                        116,\n                        101,\n             114,\n                        45,\n                        118,\n                        109,\n                        45,\n                        97,\n                        116,\n                        116,\n                        101,\n                        115,\n                    ],\n                },\n            ),\n            backend_spec: Crucible(\n                CrucibleStorageBackend {\n                    request_json: "<redacted>",\n                    readonly: true,\n                },\n            ),\n        },\n        Name(\n            "cloud-init-dev",\n        ): Disk {\n            device_spec: Virtio(\n                VirtioDisk {\n                    backend_id: Name(\n                        "cloud-init-backend",\n                    ),\n                    pci_path: PciPath {\n                        bus: 0,\n                        device: 24,\n                        function: 0,\n                    },\n                },\n            ),\n            backend_spec: Blob(\n                BlobStorageBackend {\n      base64: "<redacted>",\n                    readonly: true,\n                },\n            ),\n        },\n    },\n    nics: {},\n    boot_settings: Some(\n        BootSettings {\n            name: Name(\n                "boot-settings",\n            ),\n            order: [\n                BootOrderEntry {\n                    device_id: Name(\n                        "70208419-564e-44a7-b1d5-6df61797d11f:device",\n                    ),\n                },\n            ],\n        },\n    ),\n    serial: {\n        Name(\n            "com1",\n        ): SerialPort {\n            num: Com1,\n            device: Uart,\n        },\n        Name(\n            "com2",\n        ): SerialPort {\n            num: Com2,\n            device: Uart,\n        },\n        Name(\n            "com3",\n        ): SerialPort {\n            num: Com3,\n            device: Uart,\n        },\n        Name(\n            "com4",\n        ): SerialPort {\n            num: Com4,\n            device: Uart,\n        },\n    },\n    pci_pci_bridges: {},\n    pvpanic: Some(\n        QemuPvpanic {\n            id: Name(\n                "pvpanic",\n            ),\n            spec: QemuPvpanic {\n                enable_isa: true,\n            },\n        },\n    ),\n    smbios_type1_input: None,\n}
    use_reservoir = true
21:24:58.239Z INFO propolis-server (vm_state_driver): Creating storage device
    device_id = 70208419-564e-44a7-b1d5-6df61797d11f:device
    spec = Nvme(NvmeDisk { backend_id: Uuid(70208419-564e-44a7-b1d5-6df61797d11f), pci_path: PciPath { bus: 0, device: 16, function: 0 }, serial_number: [109, 121, 45, 99, 111, 109, 112, 117, 116, 101, 114, 45, 118, 109, 45, 97, 116, 116, 101, 115] })

i really don't like this and wish that we printed this out in...pretty much any possible format that isn't this specific one.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.