Cloud-config write_files only writing the first file in config

I’m trying to set up an LXD profile to do some basic init tasks upon creation of an Arch Linux container, but I’m having trouble with the write_files: section. Only the first file that I list in the section is getting written, and the rest are being ignored, and I’m not sure why. Here’s the profile I’m trying to use:

 config:
  boot.autostart: "false"
  boot.autostart.priority: "98"
  security.nesting: "true"
  user.vendor-data: |
    #cloud-config
    users:
      - name: ****
        ssh_authorized_keys:
          - ssh-ed25519 ***
          - ssh-ed25519 ***
        plain_text_passwd: '********'
        lock_passwd: false
        sudo: ALL=(ALL) ALL
        shell: /bin/bash

    packages:
      - openssh

    runcmd:
      - echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
      - locale-gen
      - localectl set-locale en_US.UTF-8
      - localectl set-keymap us
      - timedatectl set-timezone America/New_York
      - chown -R ****:**** /home/****
      - groupadd -g 1010 zfswrite
      - usermod -aG zfswrite ****
      - sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
      - systemctl enable sshd
      - systemctl start sshd

    write_files:
      - encoding: b64
        owner: ****:****
        permissions: '0644'
        path: /home/****/.bash_profile
        content: |
          IwojIH4vLmJhc2hfcHJvZmlsZQojCgpbWyAtZiB+Ly5iYXNocmMgXV0gJiYgLiB+Ly5iYXNocmMK
      - encoding: gz+b64
        owner: ****:****
        permissions: '0644'
        path: /home/****/.bashrc
        content: |
          H4sICBtAgGAAAzIuYmFzaHJjAJVUUU/bMBB+96+4tWgBRChlgoeiSJu6slUCOrXwMlohN7kQi9TO
          bKehE9pv39luKdvYpFVqmjt/d9935+u1WRt+dA7n3BQ6ZW1G5jAHqSzoWkoh70FIi5qnViyxXB1A
          pmRk6QlcrmxBAHZ7CzsxvElgX+zDbAZv34JGW2vJXLaAr2qKqatSpNwilEKiAaXXL8ZybR1VI2wB
          puIpEivYAqEQxiq9OqREE0RwMne7e5BT7EJpBFVZoaRhn4eT6/7o6no8ukjEvaSjubKF4+dVhTID
          q17mg1yUuKlFLVE3WpAuYZkpKCXExiNDrMviCA1ar3KTo0R57/SSLkc/GX4dUFMyb5wPLwbeQXWs
          RbMNKOkeHR2xl6jk2HmIJi0wffBCGyEz1YAR3xF4TjcAyNMCUrVYOA76HoCgi8IUjeF6dUDRdZW5
          7rrwJS9r1+IcLoZXg4nX1R9d3FxeTQ63NXo6YnIsjp4qBA45l+kKKq0WhNqVSsapKpU+gFqWRAYN
          woMkbfTbari0LfDneyzlhlw714PxZYsKZ0CfR5K+CAme9uPjk9OADSF3gSRZoTk7Y2h46lSg5PMS
          AwJMXVVKW1dJaXwZvDQ0fFkGBVkrMgXRGkbNuIX4ETq10Z25kJ1MaJ/CwOzM9STosWiodO1mfgug
          iUXqGGnf3Trj+S+gvRY8Pb0K22v5zF4IiUwiEhqHkhNeWxX543Y4p8AkosffEUsPWf6JecFyr7FK
          Ivd8JU+A5AGT/xOEAYSvgHLhB9J5MINP/T40XLuFEG4BtabqGT7626HjOxqv0XhCydxJctQ9e9ft
          rUO8ddKjrYL+9bSXcloR/v24V6q0NvTe+1YHQORnUS0w/Mfdva8ved3jMvSYl+fRxsWD68OzI9h9
          QrAvk24S3U7r99MCps2Uz6Y7EPnldGPCTqHKF1WJbpf4vxVfclG6KfTLjeLdiMR5GC5TkPjOb2He
          vtva60U49c0+/I9Atunp4OPwejROnudZcqnYTxfwoPmvBQAA
      - encoding: gz+b64
        owner: root:root
        path: /etc/nanorc
        content: |
          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
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: arch-default

Any help would be greatly appreciated!

Also, I’ve noticed that the security.nesting setting isn’t getting applied to created containers. Is that possibly related?

And you’re creating using -p arch-default and looking at the resulting config with lxc config show --expanded NAME-OF-CONTAINER ?

Sorry, didn’t notice the --expanded modifier. Now it shows up. Wonder why docker isn’t working then.

Would you know where I can get help with my cloud-config issues?

Usually you’ll want to check at the cloud-init log files in /var/log and also check /var/lib/cloud/seed to confirm the right YAML made it in.

Note that cloud-init is only templated on creation, so changing the profile and restarting the container won’t work, you need to create a new container or use this workaround:

  • lxc config set NAME volatile.apply_template create
  • lxc start NAME

Thanks. I’m seeing this error in /var/log/lxd/CONTAINER/console.log:

[188876.988518] cloud-init[107]: 2021-04-29 17:28:24,006 - util.py[WARNING]: Running module write-files (<module 'cloudinit.config.cc_write_files' from '/usr/lib/python3.9/site-packages/cloudinit/config/cc_write_files.py'>) failed

Wait, you meant in the container, sorry. Let me look there.

Okay, it looks like the user isn’t created before the file?

2021-04-29 17:28:24,006 - util.py[DEBUG]: Running module write-files (<module 'cloudinit.config.cc_write_files' from '/usr/lib/python3.9/site-packages/cloudinit/config/cc_write_files.py'>) failed
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/cloudinit/util.py", line 1350, in chownbyname
    uid = pwd.getpwnam(user).pw_uid
KeyError: "getpwnam(): name not found: 'chris'"

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/cloudinit/stages.py", line 874, in _run_modules
    ran, _r = cc.run(run_name, mod.handle, func_args,
  File "/usr/lib/python3.9/site-packages/cloudinit/cloud.py", line 54, in run
    return self._runners.run(name, functor, args, freq, clear_on_fail)
  File "/usr/lib/python3.9/site-packages/cloudinit/helpers.py", line 185, in run
    results = functor(*args)
  File "/usr/lib/python3.9/site-packages/cloudinit/config/cc_write_files.py", line 172, in handle
    write_files(name, files)
  File "/usr/lib/python3.9/site-packages/cloudinit/config/cc_write_files.py", line 212, in write_files
    util.chownbyname(path, u, g)
  File "/usr/lib/python3.9/site-packages/cloudinit/util.py", line 1354, in chownbyname
    raise OSError("Unknown user or group: %s" % (e)) from e
OSError: Unknown user or group: "getpwnam(): name not found: 'chris'"

Is there a workaround for this? Does the run command section run after write_files?