Config Mode

The Config Mode consists of several modules that provide a range of different configuration options:

gluon-config-mode-core

This modules provides the core functionality for the config mode. All modules must depend on it.

gluon-config-mode-hostname

Provides a hostname field.

gluon-config-mode-autoupdater

Informs whether the autoupdater is enabled.

gluon-config-mode-mesh-vpn

Allows toggling of mesh-vpn-fastd and setting a bandwidth limit.

gluon-config-mode-geo-location

Enables the user to set the geographical location of the node.

gluon-config-mode-contact-info

Adds a field where the user can provide contact information.

Writing Config Mode modules

Config mode modules are located at /lib/gluon/config-mode/wizard and /lib/gluon/config-mode/reboot. Modules are named like 0000-name.lua and are executed in lexical order. In the standard package set, the order is, for wizard modules:

  • 0050-autoupdater-info

  • 0100-hostname

  • 0300-mesh-vpn

  • 0400-geo-location

  • 0500-contact-info

The reboot module order is:

  • 0100-mesh-vpn

  • 0900-msg-reboot

All modules are run in the gluon-web model context and have access to the same variables as “full” gluon-web modules.

Wizards

Wizard modules must return a function that is provided with the wizard form and an UCI cursor. The function can create configuration sections in the form:

return function(form, uci)
  local s = form:section(Section)
  local o = s:option(Value, "hostname", "Hostname")
  o.default = uci:get_first("system", "system", "hostname")
  o.datatype = "hostname"

  function o:write(data)
    uci:set("system", uci:get_first("system", "system"), "hostname", data)
  end

  return {'system'}
end

The function may return a table of UCI packages to commit after the individual fields’ write methods have been executed. This is done to avoid committing the packages repeatedly when multiple wizard modules modify the same package.

Reboot page

Reboot modules are simply executed when the reboot page is rendered:

renderer.render_string("Hello World!")