11 Copyright 2008 Steven Barth <steven@midlink.org>
13 Licensed under the Apache License, Version 2.0 (the "License");
14 you may not use this file except in compliance with the License.
15 You may obtain a copy of the License at
17 http://www.apache.org/licenses/LICENSE-2.0
19 Unless required by applicable law or agreed to in writing, software
20 distributed under the License is distributed on an "AS IS" BASIS,
21 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 See the License for the specific language governing permissions and
23 limitations under the License.
26 local uci = require("uci")
27 local util = require("luci.util")
28 local setmetatable, rawget, rawset = setmetatable, rawget, rawset
29 local error, pairs, ipairs, tostring = error, pairs, ipairs, tostring
32 --- LuCI UCI model library.
33 module("luci.model.uci", function(m) setmetatable(m, {__index = uci}) end)
35 savedir_default = "/tmp/.uci"
36 confdir_default = "/etc/config"
38 savedir_state = "/var/state"
40 --- Delete all sections of a given type that match certain criteria.
41 -- @param config UCI config
42 -- @param type UCI section type
43 -- @param comparator Function that will be called for each section and
44 -- returns a boolean whether to delete the current section (optional)
45 function delete_all(config, type, comparator)
47 local function helper (section)
48 if not comparator or comparator(section) then
49 table.insert(del, section[".name"])
53 foreach(config, type, helper)
55 for i, j in ipairs(del) do
60 --- Create a new section and initialize it with data.
61 -- @param config UCI config
62 -- @param type UCI section type
63 -- @param name UCI section name (optional)
64 -- @param values Table of key - value pairs to initialize the section with
65 -- @return Name of created section
66 function section(config, type, name, values)
69 stat = set(config, name, type)
71 name = add(config, type)
75 if stat and values then
76 stat = tset(config, name, values)
82 --- Get a certain state value.
83 -- @param ... Parameters passed to function get
86 function get_statevalue(...)
87 set_savedir(savedir_state)
88 local result = get(...)
89 set_savedir(savedir_default)
93 --- Updated the data of a section using data from a table.
94 -- @param config UCI config
95 -- @param section UCI section name (optional)
96 -- @param values Table of key - value pairs to update the section with
97 function tset(config, section, values)
99 for k, v in pairs(values) do
100 if k:sub(1, 1) ~= "." then
101 stat = stat and set(config, section, k, v)
107 --- Add an anonymous section.
110 -- @param config UCI config
111 -- @param type UCI section type
112 -- @return Name of created section
114 --- Get a table of unsaved changes.
117 -- @param config UCI config
118 -- @return Table of changes
120 --- Commit unsaved changes.
123 -- @param config UCI config
124 -- @return Boolean whether operation succeeded
127 --- Deletes a section or an option.
130 -- @param config UCI config
131 -- @param section UCI section name
132 -- @param option UCI option (optional)
133 -- @return Boolean whether operation succeeded
135 --- Call a function for every section of a certain type.
138 -- @param config UCI config
139 -- @param type UCI section type
140 -- @param callback Function to be called
141 -- @return Boolean whether operation succeeded
143 --- Get a section type or an option
146 -- @param config UCI config
147 -- @param section UCI section name
148 -- @param option UCI option (optional)
151 --- Get all sections of a config or all values of a section.
154 -- @param config UCI config
155 -- @param section UCI section name (optional)
156 -- @return Table of UCI sections or table of UCI values
158 --- Manually load a config.
161 -- @param config UCI config
162 -- @return Boolean whether operation succeeded
166 --- Revert unsaved changes.
169 -- @param config UCI config
170 -- @return Boolean whether operation succeeded
173 --- Saves changes made to a config to make them committable.
176 -- @param config UCI config
177 -- @return Boolean whether operation succeeded
181 --- Set a value or create a named section.
184 -- @param config UCI config
185 -- @param section UCI section name
186 -- @param option UCI option or UCI section type
187 -- @param value UCI value or nil if you want to create a section
188 -- @return Boolean whether operation succeeded
190 --- Set the configuration directory.
193 -- @param directory UCI configuration directory
194 -- @return Boolean whether operation succeeded
196 --- Set the directory for uncommited changes.
199 -- @param directory UCI changes directory
200 -- @return Boolean whether operation succeeded
202 --- Discard changes made to a config.
205 -- @param config UCI config
206 -- @return Boolean whether operation succeeded