** Description changed:

- In Ubuntu images that do not have snapd debian package installed
- launching with the following user-data triggers cloud-init to run `snap
- refresh` when that command doesn't exist.
+ [ Impact ]
  
+  * SRU of cloud-init 24.1.3 to Focal, Jammy and Mantic introduced a
+ regression where cloud-init will attempt to call `snap refresh` on new
+ Ubuntu instance launches the Ubuntu image does not contain snapd deb
+ package installed and  optional #cloud-config user-data is provided
+ which contains `upgrade_packages: true`.
+ 
+  * Such optional user-data on custom ubuntu images will result in cloud-init 
exiting in error condition as seen from cloud-init status due to the following 
error message:
+       - ('package_update_upgrade_install', ProcessExecutionError("Unexpected 
error while running command.\nCommand: ['snap', 'refresh']\nExit code: 
-\nReason: [Errno 2] No such file or directory: b'snap'\nStdout: -\nStderr: -"))
+ 
+ 
+ This only affects new custom Ubuntu image launches where both of the 
following conditions are met:
+ 1. image is a custom ubuntu image which does not contain snapd deb package
+ 2. At instance launch, optional #cloud-config user-data contains 
`package_upgrade: true`
+ 
+ 
+ Ubuntu cloudimages published by Canonical for Focal, Jammy and Mantic all 
currently snapd deb package.
+ 
+ And even for custom Ubuntu images without snapd installed, only when
+ package operations are provided via #cloud-config is the instance launch
+ affected.
+ 
+ 
+ [ Test Plan ]
+  * # launch ubuntu cloud images in LXC, remove snapd, provide 
"#cloud-config\npackage_upgrade:true" as user-data and clean reboot to force 
cloud-init to attempt to upgrade any package managers (snap and apt) where 
applicable.
+ 
+  * confirm no snap command present in image
+  * check cloud-init status --format=yaml to ensure no errors
+  * grep snap.*refresh /var/log/cloud-init.log to assert no stray snap refresh 
is attempted on an image without snap
+ 
+ 
+ #!/bin/bash
+ lxc launch ubuntu-daily:jammy test-no-snap
+ sleep 3
+ lxc exec test-no-snap -- cloud-init status --wait
+ lxc exec test-no-snap -- apt remove snapd -y
+ 
+ cat > pkg-update.yaml <<EOF
+ #cloud-config
+ package_update: true
+ EOF
+ 
+ lxc config set test-no-snap cloud-init.user-data="$(cat pkg-update.yaml)"
+ lxc exec test-no-snap -- cloud-init clean --logs --reboot
+ sleep 3
+ 
+ # expect no warnings/errors
+ lxc exec test-no-snap -- cloud-init status --wait --format=yaml
+ 
+ # ensure no calls to snap refresh
+ lxc exec test-no-snap -- egrep 'snap.*refresh' /var/log/cloud-init.log
+ 
+ 
+ [ Where problems could occur ]
+ 
+ The bug above is an unwanted error log that results in cloud-init
+ reporting an error state and non-zero exit code. The error log doesn't
+ erode the actual final configuration applied to the machine, it just
+ sets a state we don't wont to see as cloud-init shouldn't be trying and
+ failing to run snap command if it doesn't exist in the environment.
+ Given that this fix is only performing a subp.which("snap") to assert
+ that the snap command exists in the path before attempting to run "snap
+ refresh" regression potential is negligible. In the unlikely event that
+ the code paths added do fail here, the regression impact woud only
+ result in a slightly different error log that also doesn't impact the
+ overall config applied to the instance at launch.
+ 
+ 
+ [ Other Info ]
+  
+ 
+ 
+ ==== original description ====
+ In Ubuntu images that do not have snapd deb package installed, launching with 
the following user-data triggers cloud-init to run `snap refresh` when that 
command doesn't exist.
  
  reproducer:
  lxc launch ubuntu-daily:jammy test-no-snap
  sleep 3
  lxc exec test-no-snap -- cloud-init status --wait
  lxc exec test-no-snap -- apt remove snapd -y
  
  cat > pkg-update.yaml <<EOF
  #cloud-config
  package_update: true
  EOF
  
  lxc config set test-no-snap cloud-init.user-data="$(cat pkg-update.yaml)"
  lxc exec test-no-snap -- cloud-init clean --logs --reboot
  sleep 3
  
  # expect no warnings/errors
  lxc exec test-no-snap -- cloud-init status --wait --format=yaml
  
- 
  # ensure no calls to snap refresh
- lxc exec test-no-snap -- egrep 'snap.*refresh' /var/log/cloud-init.log
+ lxc exec test-no-snap -- egrep 'snap.*refresh' /var/log/cloud-init.logb

** Description changed:

  [ Impact ]
  
-  * SRU of cloud-init 24.1.3 to Focal, Jammy and Mantic introduced a
+  * SRU of cloud-init 24.1.3 to Focal, Jammy and Mantic introduced a
  regression where cloud-init will attempt to call `snap refresh` on new
- Ubuntu instance launches the Ubuntu image does not contain snapd deb
- package installed and  optional #cloud-config user-data is provided
- which contains `upgrade_packages: true`.
+ Ubuntu instance launches if the Ubuntu image does not contain snapd deb
+ package and optional #cloud-config user-data is provided which contains
+ `upgrade_packages: true`.
  
-  * Such optional user-data on custom ubuntu images will result in cloud-init 
exiting in error condition as seen from cloud-init status due to the following 
error message:
-       - ('package_update_upgrade_install', ProcessExecutionError("Unexpected 
error while running command.\nCommand: ['snap', 'refresh']\nExit code: 
-\nReason: [Errno 2] No such file or directory: b'snap'\nStdout: -\nStderr: -"))
- 
+  * Such optional user-data on custom ubuntu images will result in cloud-init 
exiting in error condition as seen from cloud-init status due to the following 
error message:
+  - ('package_update_upgrade_install', ProcessExecutionError("Unexpected error 
while running command.\nCommand: ['snap', 'refresh']\nExit code: -\nReason: 
[Errno 2] No such file or directory: b'snap'\nStdout: -\nStderr: -"))
  
  This only affects new custom Ubuntu image launches where both of the 
following conditions are met:
  1. image is a custom ubuntu image which does not contain snapd deb package
  2. At instance launch, optional #cloud-config user-data contains 
`package_upgrade: true`
  
+ Ubuntu cloudimages published by Canonical for Focal, Jammy and Mantic
+ all currently have the snapd deb package installed.
  
- Ubuntu cloudimages published by Canonical for Focal, Jammy and Mantic all 
currently snapd deb package.
+ Even for custom Ubuntu images without snapd deb package installed, this
+ issue is only triggered when #cloud-config contains the optional
+ `package_upgrade: true` during instance launch.
  
- And even for custom Ubuntu images without snapd installed, only when
- package operations are provided via #cloud-config is the instance launch
- affected.
+ This error log does cause cloud-init status to exit non-zero, but it
+ doesn't affect the integrity of the configuration applied to the system.
+ It is just an undesirable error log message for an unsupported (snap)
+ package manager within the environment.
  
  
  [ Test Plan ]
-  * # launch ubuntu cloud images in LXC, remove snapd, provide 
"#cloud-config\npackage_upgrade:true" as user-data and clean reboot to force 
cloud-init to attempt to upgrade any package managers (snap and apt) where 
applicable.
+  * # launch ubuntu cloud images in LXC, remove snapd, provide 
"#cloud-config\npackage_upgrade:true" as user-data and clean reboot to force 
cloud-init to attempt to upgrade any package managers (snap and apt) where 
applicable.
  
-  * confirm no snap command present in image
-  * check cloud-init status --format=yaml to ensure no errors
-  * grep snap.*refresh /var/log/cloud-init.log to assert no stray snap refresh 
is attempted on an image without snap
- 
+  * confirm no snap command present in image
+  * check cloud-init status --format=yaml to ensure no errors
+  * grep snap.*refresh /var/log/cloud-init.log to assert no stray snap refresh 
is attempted on an image without snap
  
  #!/bin/bash
  lxc launch ubuntu-daily:jammy test-no-snap
  sleep 3
  lxc exec test-no-snap -- cloud-init status --wait
  lxc exec test-no-snap -- apt remove snapd -y
  
  cat > pkg-update.yaml <<EOF
  #cloud-config
  package_update: true
  EOF
  
  lxc config set test-no-snap cloud-init.user-data="$(cat pkg-update.yaml)"
  lxc exec test-no-snap -- cloud-init clean --logs --reboot
  sleep 3
  
  # expect no warnings/errors
  lxc exec test-no-snap -- cloud-init status --wait --format=yaml
  
  # ensure no calls to snap refresh
  lxc exec test-no-snap -- egrep 'snap.*refresh' /var/log/cloud-init.log
  
- 
  [ Where problems could occur ]
  
  The bug above is an unwanted error log that results in cloud-init
  reporting an error state and non-zero exit code. The error log doesn't
  erode the actual final configuration applied to the machine, it just
  sets a state we don't wont to see as cloud-init shouldn't be trying and
  failing to run snap command if it doesn't exist in the environment.
  Given that this fix is only performing a subp.which("snap") to assert
  that the snap command exists in the path before attempting to run "snap
  refresh" regression potential is negligible. In the unlikely event that
  the code paths added do fail here, the regression impact woud only
  result in a slightly different error log that also doesn't impact the
  overall config applied to the instance at launch.
  
- 
  [ Other Info ]
-  
- 
  
  ==== original description ====
  In Ubuntu images that do not have snapd deb package installed, launching with 
the following user-data triggers cloud-init to run `snap refresh` when that 
command doesn't exist.
  
  reproducer:
  lxc launch ubuntu-daily:jammy test-no-snap
  sleep 3
  lxc exec test-no-snap -- cloud-init status --wait
  lxc exec test-no-snap -- apt remove snapd -y
  
  cat > pkg-update.yaml <<EOF
  #cloud-config
  package_update: true
  EOF
  
  lxc config set test-no-snap cloud-init.user-data="$(cat pkg-update.yaml)"
  lxc exec test-no-snap -- cloud-init clean --logs --reboot
  sleep 3
  
  # expect no warnings/errors
  lxc exec test-no-snap -- cloud-init status --wait --format=yaml
  
  # ensure no calls to snap refresh
  lxc exec test-no-snap -- egrep 'snap.*refresh' /var/log/cloud-init.logb

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2064132

Title:
  images without snapd installed error on `update_packages: true` user-
  data

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/2064132/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to