summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-mod-admin-full/luasrc/view/admin_uci
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-04-26 08:52:55 +0200
committerJo-Philipp Wich <jo@mein.io>2018-05-05 23:11:23 +0200
commit8deb9495515b97898514e8ffb8f002c8afe3bfa7 (patch)
tree65d4d7b831c273329c0a79a6b9e4a547e760481b /modules/luci-mod-admin-full/luasrc/view/admin_uci
parent7cca3139591a08e62b7900115fe0bfd4a3df8f8a (diff)
treewide: rework uci apply workflow
Switch to rpcd based uci apply/rollback workflow which helps to avoid soft- bricking devices by requiring an explicit confirmation call after config apply. When a user now clicks "Save & Apply", LuCI first issues a call to uci apply which commits and reloads configuration, then goes into a polling countdown mode where it repeatedly attempts to call uci confirm. If the committed configuration is sane, the confirm call will go through and cancel rpcd's pending rollback timer. If the configuration change leads to a loss of connectivity (e.g. due to bad firewall rules or similar), the rollback mechanism will kick in after the timeout and revert configuration files and pending changes to the pre-apply state. In order to cover such rare cases where a lost of connectivity is expected and desired, the user is offered an "unchecked" apply option after timing out, which allows committing and applying the changes anyway, without the extra safety checks. As a consequence of this change, the luci-reload mechanism is now completely unsused since rpcd uses ubus config reload signals to reload affected services, which means that only procd-enabled services will receive proper reload treatment with the new workflow. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-mod-admin-full/luasrc/view/admin_uci')
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm23
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm29
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm25
3 files changed, 34 insertions, 43 deletions
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm
deleted file mode 100644
index 370027e510..0000000000
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm
+++ /dev/null
@@ -1,23 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%+header%>
-
-<h2 name="content"><%:Configuration%> / <%:Apply%></h2>
-
-<% if changes then %>
- <%+cbi/apply_xhr%>
- <%+admin_uci/changelog%>
-
- <%- cbi_apply_xhr('uci-apply', configs) -%>
-
- <p><strong><%:The following changes have been committed%>:</strong></p>
- <%- uci_changelog(changes) -%>
-<% else %>
- <p><strong><%:There are no pending changes to apply!%></strong></p>
-<% end %>
-
-<%+footer%>
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
index 6e725c8888..9e9ce2be2a 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
@@ -1,40 +1,41 @@
<%#
Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2008-2018 Jo-Philipp Wich <jo@mein.io>
Licensed to the public under the Apache License 2.0.
-%>
<%+header%>
+<%-
+ local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir"))
+
+ include("cbi/apply_widget")
+ include("admin_uci/changelog")
+
+ cbi_apply_widget(redir_url or url("admin/uci/changes"))
+-%>
+
<h2 name="content"><%:Configuration%> / <%:Changes%></h2>
<% if changes then %>
- <%+admin_uci/changelog%>
<%- uci_changelog(changes) -%>
<% else %>
<p><strong><%:There are no pending changes!%></strong></p>
<% end %>
+<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
+
<div class="cbi-page-actions">
- <% local node, url = luci.dispatcher.lookup(luci.http.formvalue("redir")); if url then %>
+ <% if redir_url then %>
<div style="float:left">
- <form class="inline" method="get" action="<%=luci.util.pcdata(url)%>">
+ <form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>">
<input class="cbi-button cbi-button-link" style="float:left; margin:0" type="submit" value="<%:Back%>" />
</form>
</div>
<% end %>
<div style="text-align:right">
- <form class="inline" method="post" action="<%=controller%>/admin/uci/apply">
- <input type="hidden" name="token" value="<%=token%>" />
- <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
- <input class="cbi-button cbi-button-apply" type="submit" value="<%:Apply%>" />
- </form>
- <form class="inline" method="post" action="<%=controller%>/admin/uci/saveapply">
- <input type="hidden" name="token" value="<%=token%>" />
- <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
- <input class="cbi-button cbi-button-save" type="submit" value="<%:Save & Apply%>" />
- </form>
+ <input class="cbi-button cbi-button-save" type="button" id="apply_button" value="<%:Save & Apply%>" onclick="uci_apply(true); this.blur()" />
<form class="inline" method="post" action="<%=controller%>/admin/uci/revert">
<input type="hidden" name="token" value="<%=token%>" />
<input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm
index 20327adff3..dff53420aa 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm
@@ -1,26 +1,39 @@
<%#
Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2008-2018 Jo-Philipp Wich <jo@mein.io>
Licensed to the public under the Apache License 2.0.
-%>
<%+header%>
+<%-
+ local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir"))
+
+ include("cbi/apply_widget")
+ include("admin_uci/changelog")
+
+ cbi_apply_widget(redir_url or url("admin/uci/revert"))
+-%>
+
<h2 name="content"><%:Configuration%> / <%:Revert%></h2>
<% if changes then %>
- <%+cbi/apply_xhr%>
- <%+admin_uci/changelog%>
-
<p><strong><%:The following changes have been reverted%>:</strong></p>
<%- uci_changelog(changes) -%>
<% else %>
<p><strong><%:There are no pending changes to revert!%></strong></p>
<% end %>
-<% local node, url = luci.dispatcher.lookup(luci.http.formvalue("redir")); if url then %>
+<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
+<script type="text/javascript">
+ document.addEventListener("DOMContentLoaded", function() {
+ uci_apply(true);
+ });
+</script>
+
+<% if redir_url then %>
<div class="cbi-page-actions">
- <form class="inline" method="get" action="<%=luci.util.pcdata(url)%>">
+ <form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>">
<input class="cbi-button cbi-button-link" style="margin:0" type="submit" value="<%:Back%>" />
</form>
</div>