Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,13 @@
# specific language governing permissions and limitations
# under the License.

# Fixed: Added qemu-guest-agent to REQUIRED_PACKAGES (GitHub Issue #13471)
# Also removes duplicate cloud-init and gnupg entries

Comment on lines +19 to +21

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don’t think we need this comment here

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Fixed: Added qemu-guest-agent to REQUIRED_PACKAGES (GitHub Issue #13471)
# Also removes duplicate cloud-init and gnupg entries

OS=`awk -F= '/^NAME/{print $2}' /etc/os-release`
REQUIRED_PACKAGES=(cloud-init cloud-guest-utils conntrack apt-transport-https ca-certificates curl gnupg gnupg-agent \
software-properties-common gnupg lsb-release python3-json-pointer python3-jsonschema cloud-init containerd.io)
software-properties-common lsb-release python3-json-pointer python3-jsonschema containerd.io \
qemu-guest-agent)
declare -a MISSING_PACKAGES
if [[ $OS == *"Ubuntu"* || $OS == *"Debian"* ]]; then
Comment on lines 23 to 27
for package in ${REQUIRED_PACKAGES[@]}; do
Expand Down
30 changes: 26 additions & 4 deletions scripts/vm/hypervisor/kvm/patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,38 @@ send_file() {
virsh qemu-agent-command $name "{\"execute\":\"guest-file-close\", \"arguments\":{\"handle\":$fd}}" > /dev/null
}

# Wait for the guest agent to come online
# Wait for the guest agent to come online (max 120s to avoid indefinite hang)
# FIX: Added timeout + clear error message (GitHub Issue #13471)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# FIX: Added timeout + clear error message (GitHub Issue #13471)

I think we don’t need fix comments when code is fixed.

GUEST_AGENT_WAIT_TICK=0
GUEST_AGENT_MAX_TICKS=1200 # 120s = 1200 x 0.1s
while ! virsh qemu-agent-command $name '{"execute":"guest-ping"}' >/dev/null 2>&1
do
sleep 0.1
GUEST_AGENT_WAIT_TICK=$((GUEST_AGENT_WAIT_TICK + 1))
if [ $((GUEST_AGENT_WAIT_TICK % 100)) -eq 0 ]; then
echo "Waiting for qemu-guest-agent to respond... (${GUEST_AGENT_WAIT_TICK}/1200 ticks, ~$((GUEST_AGENT_WAIT_TICK / 10))s elapsed)"
fi
if [ $GUEST_AGENT_WAIT_TICK -ge $GUEST_AGENT_MAX_TICKS ]; then
echo "ERROR: qemu-guest-agent not responding after 120 seconds."
Comment on lines +70 to +74

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this one makes sense to me @goal86sg . Would you apply?

echo "The VM template is missing 'qemu-guest-agent' or the service is not running."
echo "Required packages: cloud-init, qemu-guest-agent, cloud-guest-utils, conntrack, containerd.io"
echo "See: https://docs.cloudstack.apache.org/en/latest/kubernetes/kubernetes-cluster-requirements.html"
exit 1
fi
done
echo "qemu-guest-agent is responsive."

# Test guest agent sanity
while [ "$(virsh qemu-agent-command $name '{"execute":"guest-sync","arguments":{"id":1234567890}}' 2>/dev/null)" != '{"return":1234567890}' ]
do
# Test guest agent sanity (bounded to 30s)
# FIX: Added timeout (GitHub Issue #13471)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

worth removing this comment as well.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# FIX: Added timeout (GitHub Issue #13471)

GUEST_SYNC_TICK=0
GUEST_SYNC_MAX_TICKS=300 # 30s
while [ "$(virsh qemu-agent-command $name '{"execute":"guest-sync","arguments":{"id":1234567890}}' 2>/dev/null)" != '{"return":1234567890}' ]; do
sleep 0.1
GUEST_SYNC_TICK=$((GUEST_SYNC_TICK + 1))
if [ $GUEST_SYNC_TICK -ge $GUEST_SYNC_MAX_TICKS ]; then
echo "ERROR: qemu-guest-agent sanity check (guest-sync) failed after 30 seconds."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one as well?

exit 1
fi
done

# Write cmdline payload
Expand Down
Loading