From 547574d7da0077a593eeafb9aac4f6997e176580 Mon Sep 17 00:00:00 2001 From: Kokel Date: Sun, 11 Jan 2015 00:07:00 +0100 Subject: [PATCH 1/2] "gluon-node-info": add section system and option role; add announce script to announce the role as nodeinfo; add invariant script "001-node-system" to add section "system" if not exist; add invariant script "010-node-role" to add section "system" if not exist; add invariant script "010-node-role" to set role to default value (site.roles.default) if not exist; depends on new site.conf section --- gluon/gluon-node-info/Makefile | 7 ++++++- gluon/gluon-node-info/check_site.lua | 8 ++++++++ .../files/etc/config/gluon-node-info | 2 ++ .../lib/gluon/announce/nodeinfo.d/system/role | 4 ++++ .../node-info/invariant/001-node-system | 11 +++++++++++ .../upgrade/node-info/invariant/010-node-role | 19 +++++++++++++++++++ 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 gluon/gluon-node-info/check_site.lua create mode 100644 gluon/gluon-node-info/files/lib/gluon/announce/nodeinfo.d/system/role create mode 100755 gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/001-node-system create mode 100755 gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/010-node-role diff --git a/gluon/gluon-node-info/Makefile b/gluon/gluon-node-info/Makefile index b509e99..0fe8a8d 100644 --- a/gluon/gluon-node-info/Makefile +++ b/gluon/gluon-node-info/Makefile @@ -6,7 +6,7 @@ PKG_RELEASE:=1 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) -include $(INCLUDE_DIR)/package.mk +include $(GLUONDIR)/include/package.mk define Package/gluon-node-info SECTION:=gluon @@ -33,4 +33,9 @@ define Package/gluon-node-info/install $(CP) ./files/* $(1)/ endef +define Package/gluon-node-info/postinst +#!/bin/sh +$(call GluonCheckSite,check_site.lua) +endef + $(eval $(call BuildPackage,gluon-node-info)) diff --git a/gluon/gluon-node-info/check_site.lua b/gluon/gluon-node-info/check_site.lua new file mode 100644 index 0000000..d8d4640 --- /dev/null +++ b/gluon/gluon-node-info/check_site.lua @@ -0,0 +1,8 @@ +local function check_role(k, _) + local role = string.format('roles.list[%q]', k) + + need_string(role) +end + +need_string('roles.default', false) +need_table('roles.list', check_role, false) diff --git a/gluon/gluon-node-info/files/etc/config/gluon-node-info b/gluon/gluon-node-info/files/etc/config/gluon-node-info index 9ac6ec5..8f6f472 100644 --- a/gluon/gluon-node-info/files/etc/config/gluon-node-info +++ b/gluon/gluon-node-info/files/etc/config/gluon-node-info @@ -2,3 +2,5 @@ config location option share_location '0' config owner + +config system diff --git a/gluon/gluon-node-info/files/lib/gluon/announce/nodeinfo.d/system/role b/gluon/gluon-node-info/files/lib/gluon/announce/nodeinfo.d/system/role new file mode 100644 index 0000000..38de47d --- /dev/null +++ b/gluon/gluon-node-info/files/lib/gluon/announce/nodeinfo.d/system/role @@ -0,0 +1,4 @@ +local role = uci:get_first('gluon-node-info', 'system', 'role', '') +if role ~= '' then + return role +end diff --git a/gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/001-node-system b/gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/001-node-system new file mode 100755 index 0000000..a17b946 --- /dev/null +++ b/gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/001-node-system @@ -0,0 +1,11 @@ +#!/usr/bin/lua + +local uci = require('luci.model.uci').cursor() + +local config = 'gluon-node-info' + +if not uci:get_first(config, 'system') then + uci:section(config, 'system') + uci:save(config) + uci:commit(config) +end diff --git a/gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/010-node-role b/gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/010-node-role new file mode 100755 index 0000000..6e54a23 --- /dev/null +++ b/gluon/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/010-node-role @@ -0,0 +1,19 @@ +#!/usr/bin/lua + +local site = require 'gluon.site_config' +local uci = require('luci.model.uci').cursor() + +local config = 'gluon-node-info' +local role = uci:get(config, uci:get_first(config, 'system'), 'role') + +if site.roles then + default_role = site.roles.default +else + default_role = '' +end + +if not role then + uci:set(config, uci:get_first(config, 'system'), 'role', default_role) + uci:save(config) + uci:commit(config) +end From 6804d871297d324fe45bfc5520c3be691b08469b Mon Sep 17 00:00:00 2001 From: Kokel Date: Sun, 11 Jan 2015 00:07:22 +0100 Subject: [PATCH 2/2] add package gluon-luci-node-role; depends on package "gluon-node-info"; depends on new site.conf section --- gluon/gluon-luci-node-role/Makefile | 37 +++++++++++++++++++ gluon/gluon-luci-node-role/check_site.lua | 8 ++++ .../lua/luci/controller/admin/noderole.lua | 5 +++ .../lib/lua/luci/model/cbi/admin/noderole.lua | 36 ++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 gluon/gluon-luci-node-role/Makefile create mode 100644 gluon/gluon-luci-node-role/check_site.lua create mode 100644 gluon/gluon-luci-node-role/files/usr/lib/lua/luci/controller/admin/noderole.lua create mode 100644 gluon/gluon-luci-node-role/files/usr/lib/lua/luci/model/cbi/admin/noderole.lua diff --git a/gluon/gluon-luci-node-role/Makefile b/gluon/gluon-luci-node-role/Makefile new file mode 100644 index 0000000..5e0fbb0 --- /dev/null +++ b/gluon/gluon-luci-node-role/Makefile @@ -0,0 +1,37 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=gluon-luci-node-role +PKG_VERSION:=0.1 +PKG_RELEASE:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(GLUONDIR)/include/package.mk + +define Package/gluon-luci-node-role + SECTION:=gluon + CATEGORY:=Gluon + DEPENDS:=+gluon-luci-admin +gluon-node-info + TITLE:=UI for specifying node role +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/gluon-luci-node-role/install + $(CP) ./files/* $(1)/ +endef + +define Package/gluon-luci-node-role/postinst +#!/bin/sh +$(call GluonCheckSite,check_site.lua) +endef + +$(eval $(call BuildPackage,gluon-luci-node-role)) diff --git a/gluon/gluon-luci-node-role/check_site.lua b/gluon/gluon-luci-node-role/check_site.lua new file mode 100644 index 0000000..cd3ca93 --- /dev/null +++ b/gluon/gluon-luci-node-role/check_site.lua @@ -0,0 +1,8 @@ +local function check_role(k, _) + local role = string.format('roles.list[%q]', k) + + need_string(role) +end + +need_string('roles.default') +need_table('roles.list', check_role) diff --git a/gluon/gluon-luci-node-role/files/usr/lib/lua/luci/controller/admin/noderole.lua b/gluon/gluon-luci-node-role/files/usr/lib/lua/luci/controller/admin/noderole.lua new file mode 100644 index 0000000..dcde01f --- /dev/null +++ b/gluon/gluon-luci-node-role/files/usr/lib/lua/luci/controller/admin/noderole.lua @@ -0,0 +1,5 @@ +module("luci.controller.admin.noderole", package.seeall) + +function index() + entry({"admin", "noderole"}, cbi("admin/noderole"), "Verwendungszweck", 20) +end diff --git a/gluon/gluon-luci-node-role/files/usr/lib/lua/luci/model/cbi/admin/noderole.lua b/gluon/gluon-luci-node-role/files/usr/lib/lua/luci/model/cbi/admin/noderole.lua new file mode 100644 index 0000000..1d6d179 --- /dev/null +++ b/gluon/gluon-luci-node-role/files/usr/lib/lua/luci/model/cbi/admin/noderole.lua @@ -0,0 +1,36 @@ +local f, s, o +local site = require 'gluon.site_config' +local uci = luci.model.uci.cursor() +local config = 'gluon-node-info' + +-- where to read the configuration from +local role = uci:get(config, uci:get_first(config, "system"), "role") + +f = SimpleForm("role", "Verwendungszweck") +f.reset = false +f.template = "admin/expertmode" +f.submit = "Fertig" + +s = f:section(SimpleSection, nil, [[ +Wenn dein Freifunk-Router eine besondere Rolle im Freifunk Netz einnimmt, kannst du diese hier angeben. +Bringe bitte zuvor in Erfahrung welche Auswirkungen die zur Verfügung stehenden Rollen im Freifunk-Netz haben. +Setze die Rolle nur, wenn du weißt was du machst. +]]) + +o = s:option(ListValue, "role", "Rolle") +o.default = role +o.rmempty = false +for role, prettyname in pairs(site.roles.list) do + o:value(role, prettyname) +end + +function f.handle(self, state, data) + if state == FORM_VALID then + uci:set(config, uci:get_first(config, "system"), "role", data.role) + + uci:save(config) + uci:commit(config) + end +end + +return f