I noticed that some workflows were not reading the serial properly (it missed some strings), specially when it was happening right next to a shutdown (e.g: read the shutdown-scripts output).
Below a simplified workflow that can reproduce this bug (one instance always fails to match the BOOTED
string)
{
"Name": "quick-test",
"Steps": {
"create0": { "CreateInstances": [ { "Name": "inst-quick-test0", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait0": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test0", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create1": { "CreateInstances": [ { "Name": "inst-quick-test1", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait1": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test1", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create2": { "CreateInstances": [ { "Name": "inst-quick-test2", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait2": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test2", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create3": { "CreateInstances": [ { "Name": "inst-quick-test3", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait3": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test3", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create4": { "CreateInstances": [ { "Name": "inst-quick-test4", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait4": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test4", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create5": { "CreateInstances": [ { "Name": "inst-quick-test5", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait5": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test5", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create6": { "CreateInstances": [ { "Name": "inst-quick-test6", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait6": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test6", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create7": { "CreateInstances": [ { "Name": "inst-quick-test7", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait7": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test7", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create8": { "CreateInstances": [ { "Name": "inst-quick-test8", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait8": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test8", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] },
"create9": { "CreateInstances": [ { "Name": "inst-quick-test9", "Disks": [{"InitializeParams": {"SourceImage": "projects/debian-cloud/global/images/family/debian-9"}}], "Metadata": {"startup-script": "logger -p daemon.info BOOTED; echo o >/proc/sysrq-trigger"} } ] },
"wait9": { "Timeout": "15s", "WaitForInstancesSignal": [ { "Name": "inst-quick-test9", "interval": "0.1s", "SerialOutput": { "Port": 1, "SuccessMatch": "BOOTED" } } ] }
}, "Dependencies": {
"wait0": ["create0"],
"wait1": ["create1"],
"wait2": ["create2"],
"wait3": ["create3"],
"wait4": ["create4"],
"wait5": ["create5"],
"wait6": ["create6"],
"wait7": ["create7"],
"wait8": ["create8"],
"wait9": ["create9"]
}
}
Note1: The subsecond interval really improved but I didn't find a perfect solution.
Note2: none of these the serial port streaming had actually grabbed the whole log. On the other hand, running gcloud compute connect-to-serial-port <INSTANCE_NAME>
give consistent results. (this seems to be a completely uncorrelated issue actually).