package-update-upgrade-install does not update when run with --frequency=always

Bug #1785225 reported by Sirio Balmelli
14
This bug affects 2 people
Affects Status Importance Assigned to Milestone
cloud-init
Expired
Medium
Unassigned

Bug Description

1. The following stanzas in /etc/cloud/cloud.cfg:

```
cloud_final_modules:
  # always update+upgrade on boot
  - [package-update-upgrade-install, always]

packages: # will run apt-update
  - git
package_update: true
package_upgrade: true
package_reboot_if_required: true
```

2. Result in the following log entry at boot-time:

```
helpers.py[DEBUG]: update-sources already ran (freq=once-per-instance)
```

3. Running the module manually with:

```
sudo cloud-init single --name package-update-upgrade-install --frequency always
```

... also fails to call `apt-get update`

4. Google gives no results.
- No similar bugs visible here.
- No additional configuration keys shown in <https://cloudinit.readthedocs.io/en/latest/topics/modules.html#package-update-upgrade-install>.
- No relevant keys given in <https://cloudinit.readthedocs.io/en/latest/topics/modules.html#apt-configure>.
- Nowhere is "update-sources" mentioned.

5. Attempted guess at "update-sources" fails:

```
sudo cloud-init single --name update-sources --frequency always
```

6. Expected behavior is that `apt-get update` is executed before `apt-get install` every time the machine is booted.
On my system the install looks like:

```
['eatmydata', 'apt-get', '--option=Dpkg::Options::=--force-confold', '--option=Dpkg::options::=--force-unsafe-io', '--assume-yes', '--quiet', 'install', 'git']
```

7. Alternate behavior would be a way to explicitly request that an update be performed.
This was attempted/guessed-at with:

```
cloud_config_modules:
  - [apt-configure, always]
```

But did not obtain an update.
There seem to be no other applicable modules listed in <https://cloudinit.readthedocs.io/en/latest/topics/modules.html#>

8. Environment:
- Ubuntu 16.04.5 LTS
- /usr/bin/cloud-init 18.2

9. /etc/cloud/cloud.cfg
---
cloud_init_modules:
  - seed_random
  - bootcmd
  - set_hostname
  - update_hostname
  - update_etc_hosts
  - ca-certs
  - rsyslog
  - users-groups
  - ssh

cloud_config_modules:
  - emit_upstart
  - ssh-import-id
  - locale
  - set-passwords
  - grub-dpkg
  - timezone
  - [apt-configure, always]
  - [runcmd, always] # doesn't actually EXECUTE the modules - that's left for scripts-user :P

cloud_final_modules:
  - landscape
  - lxd
  - ssh-authkey-fingerprints
  - final-message
  - power-state-change
  - [package-update-upgrade-install, always]
  - [scripts-user, always]

system_info:
  distro: ubuntu
  paths:
    cloud_dir: /var/lib/cloud/
    templates_dir: /etc/cloud/templates/
    upstart_dir: /etc/init/
  ssh_svcname: ssh

disable_root: true

datasource_list: [NoCloud, None]

preserve_hostname: false
hostname: {hostname}
manage_etc_hosts: true

apt:
  preserve_sources_list: false
  primary:
    - arches:
        - amd64
        - i386
        - default
      uri: "http://archive.ubuntu.com/ubuntu/"
      search:
        - "http://ch.archive.ubuntu.com/ubuntu"
        - "http://us.archive.ubuntu.com/ubuntu"
      search_dns: true
  security:
    - arches:
        - amd64
        - i386
        - default
      uri: "http://security.ubuntu.com/ubuntu/"
      search_dns: true
  # (custom PPAs elided)
  sources_list: |
    deb http://archive.ubuntu.com/ubuntu/ xenial main restricted
    deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted
    deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
    deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
    deb http://archive.ubuntu.com/ubuntu/ xenial universe
    deb-src http://archive.ubuntu.com/ubuntu/ xenial universe
    deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe
    deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates universe
    deb http://archive.ubuntu.com/ubuntu/ xenial multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ xenial multiverse
    deb http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse
    deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted
    deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted
    deb http://security.ubuntu.com/ubuntu/ xenial-security universe
    deb-src http://security.ubuntu.com/ubuntu/ xenial-security universe
    deb http://security.ubuntu.com/ubuntu/ xenial-security multiverse
    deb-src http://security.ubuntu.com/ubuntu/ xenial-security multiverse
runcmd:
  - [echo, startup run $(date)]

packages: # SHOULD run apt-update; does not
  - git
package_update: true
package_upgrade: true
package_reboot_if_required: true

description: updated
summary: - package-update-upgrade-install does not *actually* update
+ package-update-upgrade-install does not update when run with frequency
+ always
summary: - package-update-upgrade-install does not update when run with frequency
- always
+ package-update-upgrade-install does not update when run with
+ --frequency=always
Revision history for this message
Ryan Harper (raharper) wrote :

Hi,

Thanks for filing the bug.

It appears that the distro.update_package_sources() runs with hardcoded frequency=PER_INSTANCE.

    def update_package_sources(self):
        self._runner.run("update-sources", self.package_command,
                         ["update"], freq=PER_INSTANCE)

Cloud-init could supply the package-update-upgrade frequency when calling this distro method if configured.

Changed in cloud-init:
importance: Undecided → Medium
status: New → Triaged
Revision history for this message
James Falcon (falcojr) wrote :
Changed in cloud-init:
status: Triaged → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.