Comment 12 for bug 1958433

Revision history for this message
Mauricio Faria de Oliveira (mfo) wrote :

I take that back. :)

Alexsander mentioned something I missed earlier.

We apparently just need to update docs,
and I have to read code more carefully. :)

...

The SNAP build _HAS_ `/etc/maas/preseeds/` as well;
it's in the read-only side (`/snap`),
not in the read-write side (`/var/snap`).

If I look closer than I did in comment #10:

The SNAP build also runs `setup.cfg` per the `python` plugin [1],
and as such, populates `/etc/maas/preseeds` with same filenames.

 @ snap/snapcraft.yaml

  72 parts:
  73 maas:
  74 plugin: python

 [1] https://snapcraft.io/docs/python-plugin

And the preseed template locations for the snap configuration
file actually include _BOTH_ of them (which I read but didn't
investigate properly):

 @ src/maasserver/djangosettings/snap.py

  19 PRESEED_TEMPLATE_LOCATIONS = (
  20 os.path.join(os.environ["SNAP_DATA"], "preseeds"),
  21 os.path.join(os.environ["SNAP"], "etc", "maas", "preseeds"),
  22 )

During test, that couldn't be picked up because of a
implementation detail / design decision, it seems:

A more generic template file in the `/var/snap` dir is _preferred over_
a more specific template file in the `/snap` dir.

See the order of the 2 for-loops here:

 @ src/maasserver/preseed.py

  789 def get_preseed_template(filenames):
  790 """Get the path and content for the first template found.
  791
  792 :param filenames: An iterable of relative filenames.
  793 """
 ...
  796 for location in settings.PRESEED_TEMPLATE_LOCATIONS:
  797 for filename in filenames:
  798 filepath = os.path.join(location, filename)
  799 try:
  800 with open(filepath, encoding="utf-8") as stream:
  801 content = stream.read()
  802 except OSError:
  803 pass # Ignore.
  804 else:
  805 return filepath, content
 ...

In my test server, there was a more generic file in /var/snap:
- /var/snap/maas/current/preseeds/curtin_userdata

which prevented the centos specific file in /snap/ to be picked:
- /snap/maas/current/etc/maas/preseeds/curtin_userdata_centos

Once I removed /var/snap/.../curtin_userdata, the changes
in /snap/.../curtin_userdata_centos were effective.

...

Well, that seems to be _the right thing to do_...

Specifically because it allows users to have their own,
_more generic_ template file that works on all releases,
and ignores the release-based templates shipped in SNAP.

...

I just think we should update the documentation about it,
right now it has 2 issues:

1) It only mentions the `/var/snap/maas/current/preseeds/`
path, which might puzzle users seeing behavior specified
in the (unknown) `/snap/maas/etc/maas/preseeds/` location.

2) The paths for DEB/SNAP are incorrectly changing due to
the UI/CLI view-change, not on DEB/SNAP change.

https://maas.io/docs/about-customising-machines#heading--templates

We should fix it here: (note the 2 `[tab]` tags)

@ src/maas-offline-docs/src/src/about-customising-machines-5976.md

132 [tabs]
133 [tab version="v3.2 Snap,v3.2 Packages,v3.1 Snap,v3.1 Packages,v3.0 Snap,v3.0 Packages,v2.9 Snap,v2.9 Packages" view="UI"]
134 ... template files are found in the `/var/snap/maas/current/preseeds/` directory ...
135 [/tab]
136 [tab version="v3.2 Snap,v3.2 Packages,v3.1 Snap,v3.1 Packages,v3.0 Snap,v3.0 Packages,v2.9 Snap,v2.9 Packages" view="CLI"]
137 ... template files are found in the `/etc/maas/preseeds/` directory ...
138 [/tab]
139 [/tabs]