198 lines
7.6 KiB
HTML
198 lines
7.6 KiB
HTML
<html>
|
|
<head>
|
|
<title>Host list</title>
|
|
|
|
<link rel="stylesheet" type="text/css" href="vendor/bootstrap/dist/css/bootstrap.min.css">
|
|
<link rel="stylesheet" type="text/css" href="../vendor/datatables/media/css/jquery.dataTables.css">
|
|
|
|
<script type="text/javascript" language="javascript" src="vendor/jquery/dist/jquery.min.js"></script>
|
|
<script type="text/javascript" language="javascript" src="vendor/bootstrap/dist/js/bootstrap.min.js"></script>
|
|
<script type="text/javascript" language="javascript" src="vendor/jquery-number/jquery.number.min.js"></script>
|
|
<script type="text/javascript" language="javascript" src="vendor/datatables/media/js/jquery.dataTables.min.js"></script>
|
|
<script type="text/javascript" language="javascript" src="vendor/datatables/media/js/dataTables.bootstrap.min.js"></script>
|
|
<script type="text/javascript" language="javascript" src="res/inittable.js"></script>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<div class="jumbotron">
|
|
<div class="row">
|
|
<div class="col-md-9">
|
|
<h1>Inventory <small>Salt minions list</small></h1>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<h3><small>{{ now }}</small></h3>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container-fluid">
|
|
<div class="panel panel-default">
|
|
<div class="panel-body">
|
|
<h2>Available minions</h2>
|
|
<table id="hostlist" class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Machine type</th>
|
|
<th>OS</th>
|
|
<th>Roles</th>
|
|
<th>IP</th>
|
|
<th>RAM (MB)</th>
|
|
<th># CPUs</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Name</td>
|
|
<td>Machine type</td>
|
|
<td>OS</td>
|
|
<td>Roles</td>
|
|
<td>IP</td>
|
|
<td>RAM (MB)</td>
|
|
<td># CPUs</td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for name, data in hostlist.iteritems() %}
|
|
<tr>
|
|
<td>
|
|
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#{{ name.translate(None, '.') }}">
|
|
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
|
|
</button>
|
|
{{ name }}
|
|
</td>
|
|
<td>{% if data.virtual != "physical" %} Virtual ({{ data.virtual }}) {% else %} Physical {% endif %}</td>
|
|
<td>{{ data.lsb_distrib_description }}</td>
|
|
<td>{% for role in data.roles %} {{ role }} {% endfor %}</td>
|
|
<td>{{ data.fqdn_ip }}</td>
|
|
<td class="right number">{{ data.mem_total }}</td>
|
|
<td class="right">{{ data.num_cpus }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
<tfoot>
|
|
<tr>
|
|
<td style="font-weight: bold;">Total:</th>
|
|
<td style="font-weight: bold;"></th>
|
|
<td style="font-weight: bold;"></th>
|
|
<td style="font-weight: bold;"></th>
|
|
<td style="font-weight: bold;"></th>
|
|
<td style="font-weight: bold;"></th>
|
|
<td style="font-weight: bold;"></th>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<h2>Disconnected minions</h2>
|
|
<table id="statuslist" class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for name in statlist['down'] %}
|
|
<tr class="danger">
|
|
<td>{{ name }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<h2>Pending keys</h2>
|
|
<table id="statuslist" class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for name in keylist['minions_pre'] %}
|
|
<tr class="warning">
|
|
<td>{{ name }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<!-- end row -->
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<h2>Previous jobs</h2>
|
|
<table id="joblist" class="table table-striped table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Arguments</th>
|
|
<th>Function</th>
|
|
<th>StartTime</th>
|
|
<th>Target</th>
|
|
<th>Target type</th>
|
|
<th>User</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for id, data in joblist|dictsort|reverse %}
|
|
<tr class="info">
|
|
<td>{{ id }}</td>
|
|
<td>{{ data.Arguments }}</td>
|
|
<td>{{ data.Function }}</td>
|
|
<td>{{ data.StartTime }}</td>
|
|
<td>{{ data.Target }}</td>
|
|
<td>{{ data['Target-type'] }}</td>
|
|
<td>{{ data.User }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% for name, data in hostlist.iteritems() %}
|
|
<div class="modal" id="{{ name.translate(None, '.') }}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
|
|
<div class="modal-dialog modal-lg" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
|
<h1 class="modal-title" id="myModalLabel">{{ name }}</h1>
|
|
</div>
|
|
<div class="modal-body">
|
|
<h2>System information</h2>
|
|
<h3>Generic</h3>
|
|
<ul>
|
|
<li>Operating System: {{ data.kernel }} ({{ data.kernelrelease }})</li>
|
|
<li>Distribution: {{ data.lsb_distrib_description }}</li>
|
|
<li>Machine type: {% if data.virtual != "physical" %} Virtual ({{ data.virtual }}) {% else %} Physical {% endif %}</li>
|
|
<li>Architecture: {{ data.osarch }}</li>
|
|
<li>Salt version: {{ data.saltversion }}</li>
|
|
</ul>
|
|
<h3>CPU</h3>
|
|
<ul>
|
|
<li>Numer of CPUs: {{ data.num_cpus }}</li>
|
|
<li>CPU architecture: {{ data.cpuarch }}</li>
|
|
<li>CPU model: {{ data.cpu_model }}</li>
|
|
</ul>
|
|
<h3>Memory</h3>
|
|
<ul>
|
|
<li>Total memory: {{ data.mem_total }}</li>
|
|
</ul>
|
|
<h3>Roles</h3>
|
|
<ul>
|
|
{% for role in data.roles %}
|
|
<li>{{ role }}</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
|
|
|
|
</body>
|
|
</html>
|