<i class="fa fa-heartbeat" rv-style="health_status | health_color"></i>
<span>Cluster health</span></a>
</li>
- <li class="treeview{%if path_info.startswith(('/server', '/osd'))%} active{%endif%}">
+ <li class="treeview{%if path_info.startswith(('/server', '/osd','/config_options'))%} active{%endif%}">
<a href="#"><i class="fa fa-server"></i> <span>Cluster</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
<li>
<a href="{{ url_prefix }}/osd">OSDs</a>
</li>
+ <li>
+ <a href="{{ url_prefix }}/config_options">Configuration</a>
+ </li>
</ul>
</li>
<li class="treeview{%if path_info.startswith('/rbd')%} active{%endif%}">
--- /dev/null
+
+{% extends "base.html" %}
+
+{% block content %}
+
+
+<script>
+ $(document).ready(function(){
+ // Pre-populated initial data at page load
+ var content_data = {{ content_data }};
+
+ rivets.formatters.display_arrays = function(arr) {
+ result = arr.join().replace(/,/g, "<br/>");
+ return "<div style='width:90px;word-break:break-all'>" + result + "</div>";
+ };
+
+ str_to_level = function(str) {
+ if (str == "basic")
+ return "0"
+ else if (str == "advanced")
+ return "1"
+ else if (str == "developer")
+ return "2"
+ };
+
+ apply_filters = function() {
+ content_data.options_list = [];
+ var selection = "#" + content_data.service;
+ $(selection).attr('selected','selected');
+ var level = $("#level").val();
+ var service = $("#service").val();
+ if (level == "developer" && service == "any") {
+ content_data.options_list = content_data.options.options;
+ }
+ for (var opt of content_data.options.options) {
+ if (service == "any" && str_to_level(opt.level) <= level) {
+ content_data.options_list.push(opt);
+ } else if (opt.services.includes(service) && str_to_level(opt.level) <= level) {
+ content_data.options_list.push(opt);
+ }
+ }
+
+ };
+
+ rivets.bind($("#content"), content_data);
+ apply_filters();
+
+ });
+</script>
+
+<!-- Page Header -->
+<section class="content-header">
+ <h1 style="font-weight:bold">
+ Configuration Options
+ <div class="pull-right" style="font-size:17px">
+ <label>Services:</label>
+ <select id="service" style="color:grey" onchange="apply_filters()">
+ <option id="mon">mon</option>
+ <option id="mgr">mgr</option>
+ <option id="osd">osd</option>
+ <option id="mds">mds</option>
+ <option id="common">common</option>
+ <option id="mds_client">mds_client</option>
+ <option id="rgw">rgw</option>
+ <option id="any">any</option>
+ </select>
+ <label>Level:</label>
+ <select id="level" style="color:grey" onchange="apply_filters()">
+ <option value="0">basic</option>
+ <option value="1">advanced</option>
+ <option value="2">developer</option>
+ </select>
+ </div>
+ </h1>
+</section>
+
+<!-- Main content -->
+<section class="content">
+ <div class="box" style="overflow:auto">
+ <div class="box-body">
+ <table class="table table-bordered">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th>Long description</th>
+ <th>Type</th>
+ <th>Level</th>
+ <th>Default</th>
+ <th>Daemon default</th>
+ <th>Tags</th>
+ <th>Services</th>
+ <th>See_also</th>
+ <th>Max</th>
+ <th>Min</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr rv-each-opt="options_list">
+ <td><div style="width:120px;word-break:break-all">{opt.name}</div></td>
+ <td><div style="width:80px;word-break:break-all">{opt.desc}</td>
+ <td><div style="width:120px;word-break:break-all">{opt.long_desc}</div></td>
+ <td><div style="width:70px;word-break:break-all">{opt.type}<div></td>
+ <td>{opt.level}</td>
+ <td><div style="width:80px;word-break:break-all">{opt.default}<div></td>
+ <td><div style="width:120px;word-break:break-all">{opt.daemon_default}</div></td>
+ <td rv-html="opt.tags | display_arrays"</td>
+ <td rv-html="opt.services | display_arrays"></td>
+ <td rv-html="opt.see_also | display_arrays"</td>
+ <td>{opt.max}</td>
+ <td>{opt.min}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+</section>
+
+
+{% endblock %}
toplevel_data=json.dumps(self._toplevel_data(), indent=2),
content_data=json.dumps(self._servers(), indent=2)
)
+
+ @cherrypy.expose
+ def config_options(self, service="any"):
+ template = env.get_template("config_options.html")
+ return template.render(
+ url_prefix = global_instance().url_prefix,
+ ceph_version=global_instance().version,
+ path_info=cherrypy.request.path_info,
+ toplevel_data=json.dumps(self._toplevel_data(), indent=2),
+ content_data=json.dumps(self.config_options_data(service), indent=2)
+ )
+
+ @cherrypy.expose
+ @cherrypy.tools.json_out()
+ def config_options_data(self, service):
+ options = {}
+ options = global_instance().get("config_options")
+
+ return {
+ 'options': options,
+ 'service': service,
+ }
def _servers(self):
return {