diff --git a/accounts/templates/account.html b/accounts/templates/account.html index 0c5068d..56f91b8 100644 --- a/accounts/templates/account.html +++ b/accounts/templates/account.html @@ -2,139 +2,139 @@ {% load i18n %} {% block title %}{% trans "User" %} - {{ user }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% include 'create_user_inst_block.html' %} - <h1 class="page-header">{{ user }}</h1> - </div> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% include 'create_user_inst_block.html' %} + <h1 class="page-header">{{ user }}</h1> + </div> + </div> + <!-- /.row --> + + {% include 'errors_block.html' %} + + {% if request.user.is_superuser and publickeys %} + <div class="row"> + <div class="col-lg-12"> + <div class="table-responsive"> + <table class="table table-bordered table-hover"> + <thead> + <tr> + <th>{% trans "Key name" %}</th> + <th>{% trans "Public key" %}</th> + </tr> + </thead> + <tbody> + {% for publickey in publickeys %} + <tr> + <td>{{ publickey.keyname }}</td> + <td title="{{ publickey.keypublic }}">{{ publickey.keypublic|truncatechars:64 }}</td> + </tr> + {% endfor %} + </tbody> + </table> </div> - <!-- /.row --> + </div> + </div> + {% endif %} - {% include 'errors_block.html' %} - - {% if request.user.is_superuser and publickeys %} - <div class="row"> + <div class="row"> + <div class="col-lg-12"> + {% if not user_insts %} <div class="col-lg-12"> - <div class="table-responsive"> - <table class="table table-bordered table-hover"> - <thead> - <tr> - <th>{% trans "Key name" %}</th> - <th>{% trans "Public key" %}</th> - </tr> - </thead> - <tbody> - {% for publickey in publickeys %} - <tr> - <td>{{ publickey.keyname }}</td> - <td title="{{ publickey.keypublic }}">{{ publickey.keypublic|truncatechars:64 }}</td> - </tr> - {% endfor %} - </tbody> - </table> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "User doesn't have any Instace" %} </div> </div> - </div> - {% endif %} - - <div class="row"> - <div class="col-lg-12"> - {% if not user_insts %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "User doesn't have any Instace" %} - </div> - </div> - {% else %} - <div class="table-responsive"> - <table class="table table-bordered table-hover"> - <thead> - <tr> - <th>#</th> - <th>{% trans "Instance" %}</th> - <th>{% trans "VNC" %}</th> - <th>{% trans "Resize" %}</th> - <th>{% trans "Delete" %}</th> - <th colspan="2">{% trans "Action" %}</th> - </tr> - </thead> - <tbody> - {% for inst in user_insts %} - <tr> - <td>{{ forloop.counter }}</td> - <td><a href="{% url 'instance' inst.instance.compute.id inst.instance.name %}">{{ inst.instance.name }}</a></td> - <td>{{ inst.is_vnc }}</td> - <td>{{ inst.is_change }}</td> - <td>{{ inst.is_delete }}</td> - <td style="width:5px;"> - <a href="#editPriv{{ forloop.counter }}" type="button" class="btn btn-xs btn-default" data-toggle="modal"> - <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> - </a> + {% else %} + <div class="table-responsive"> + <table class="table table-bordered table-hover"> + <thead> + <tr> + <th>#</th> + <th>{% trans "Instance" %}</th> + <th>{% trans "VNC" %}</th> + <th>{% trans "Resize" %}</th> + <th>{% trans "Delete" %}</th> + <th colspan="2">{% trans "Action" %}</th> + </tr> + </thead> + <tbody> + {% for inst in user_insts %} + <tr> + <td>{{ forloop.counter }}</td> + <td><a href="{% url 'instance' inst.instance.compute.id inst.instance.name %}">{{ inst.instance.name }}</a></td> + <td>{{ inst.is_vnc }}</td> + <td>{{ inst.is_change }}</td> + <td>{{ inst.is_delete }}</td> + <td style="width:5px;"> + <a href="#editPriv{{ forloop.counter }}" type="button" class="btn btn-xs btn-default" data-toggle="modal"> + <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> + </a> - <!-- Modal pool --> - <div class="modal fade" id="editPriv{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="editPrivLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Edit privilegies for" %} {{ inst.instance.name }}</h4> + <!-- Modal pool --> + <div class="modal fade" id="editPriv{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="editPrivLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Edit privilegies for" %} {{ inst.instance.name }}</h4> + </div> + <div class="modal-body"> + <form class="form-horizontal" method="post" action="" role="form">{% csrf_token %} + <input type="hidden" name="user_inst" value="{{ inst.id }}"> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "VNC" %}</label> + <div class="col-sm-6"> + <select type="text" class="form-control" name="inst_vnc"> + <option value="">False</option> + <option value="1" {% if inst.is_vnc %}selected{% endif %}>True</option> + </select> + </div> </div> - <div class="modal-body"> - <form class="form-horizontal" method="post" action="" role="form">{% csrf_token %} - <input type="hidden" name="user_inst" value="{{ inst.id }}"> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "VNC" %}</label> - <div class="col-sm-6"> - <select type="text" class="form-control" name="inst_vnc"> - <option value="">False</option> - <option value="1" {% if inst.is_vnc %}selected{% endif %}>True</option> - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Resize" %}</label> - <div class="col-sm-6"> - <select type="text" class="form-control" name="inst_change"> - <option value="">False</option> - <option value="1" {% if inst.is_change %}selected{% endif %}>True</option> - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Delete" %}</label> - <div class="col-sm-6"> - <select type="text" class="form-control" name="inst_delete"> - <option value="">False</option> - <option value="1" {% if inst.is_delete %}selected{% endif %}>True</option> - </select> - </div> - </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Resize" %}</label> + <div class="col-sm-6"> + <select type="text" class="form-control" name="inst_change"> + <option value="">False</option> + <option value="1" {% if inst.is_change %}selected{% endif %}>True</option> + </select> + </div> </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> - <button type="submit" class="btn btn-primary" name="permission">{% trans "Edit" %}</button> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Delete" %}</label> + <div class="col-sm-6"> + <select type="text" class="form-control" name="inst_delete"> + <option value="">False</option> + <option value="1" {% if inst.is_delete %}selected{% endif %}>True</option> + </select> + </div> </div> - </form> - </div> <!-- /.modal-content --> - </div> <!-- /.modal-dialog --> - </div> <!-- /.modal --> - </td> - <td style="width:5px;"> - <form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="user_inst" value="{{ inst.id }}"> - <button type="submit" class="btn btn-xs btn-default" name="delete" tittle="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> - </button> - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% endif %} + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> + <button type="submit" class="btn btn-primary" name="permission">{% trans "Edit" %}</button> + </div> + </form> + </div> <!-- /.modal-content --> + </div> <!-- /.modal-dialog --> + </div> <!-- /.modal --> + </td> + <td style="width:5px;"> + <form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="user_inst" value="{{ inst.id }}"> + <button type="submit" class="btn btn-xs btn-default" name="delete" tittle="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> + </button> + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> </div> - </div> + {% endif %} + </div> + </div> {% endblock %} diff --git a/accounts/templates/accounts-list.html b/accounts/templates/accounts-list.html index f5a6013..d6630cc 100644 --- a/accounts/templates/accounts-list.html +++ b/accounts/templates/accounts-list.html @@ -30,11 +30,11 @@ <table class="table table-striped table-hover"> <thead> <tr> - <th>Username</th> - <th>Status</th> - <th>Staff</th> - <th>Superuser</th> - <th>Clone</th> + <th>{% trans "Username" %}</th> + <th>{% trans "Status" %}</th> + <th>{% trans "Staff" %}</th> + <th>{% trans "Superuser" %}</th> + <th>{% trans "Clone" %}</th> </tr> </thead> <tbody class="searchable"> diff --git a/computes/templates/computes.html b/computes/templates/computes.html index 6233122..a03b937 100644 --- a/computes/templates/computes.html +++ b/computes/templates/computes.html @@ -2,251 +2,250 @@ {% load i18n %} {% block title %}{% trans "Computes" %}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% include 'create_comp_block.html' %} - <h1 class="page-header">{% trans "Computes" %}</h1> - </div> - </div> - <!-- /.row --> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% include 'create_comp_block.html' %} + <h1 class="page-header">{% trans "Computes" %}</h1> + </div> + </div> + <!-- /.row --> - {% include 'errors_block.html' %} + {% include 'errors_block.html' %} - <div class="row"> - {% if computes_info %} - {% for compute in computes_info %} - <div id="{{ compute.name }}" class="col-xs-12 col-sm-4"> - <div class="panel {% if compute.status %}panel-success{% else %}panel-danger{% endif %} panel-data"> - <div class="panel-heading"> - {% ifequal compute.status 1 %} - <h3 class="panel-title"> - <a href="{% url 'overview' compute.id %}"><strong>{{ compute.name }}</strong></a> - <a data-toggle="modal" href="#editHost{{ compute.id }}" class="pull-right" title="{% trans "Edit" %}"> - <i class="fa fa-cog"></i> - </a> - </h3> - {% else %} - <h3 class="panel-title"><strong>{{ compute.name }}</strong> - <a data-toggle="modal" href="#editHost{{ compute.id }}" class="pull-right" title="{% trans "Edit" %}"> - <span class="glyphicon glyphicon-cog"></span> - </a> - </h3> - {% endifequal %} + <div class="row"> + {% if computes_info %} + {% for compute in computes_info %} + <div id="{{ compute.name }}" class="col-xs-12 col-sm-4"> + <div class="panel {% if compute.status %}panel-success{% else %}panel-danger{% endif %} panel-data"> + <div class="panel-heading"> + {% ifequal compute.status 1 %} + <h3 class="panel-title"> + <a href="{% url 'overview' compute.id %}"><strong>{{ compute.name }}</strong></a> + <a data-toggle="modal" href="#editHost{{ compute.id }}" class="pull-right" title="{% trans "Edit" %}"> + <i class="fa fa-cog"></i> + </a> + </h3> + {% else %} + <h3 class="panel-title"><strong>{{ compute.name }}</strong> + <a data-toggle="modal" href="#editHost{{ compute.id }}" class="pull-right" title="{% trans "Edit" %}"> + <span class="glyphicon glyphicon-cog"></span> + </a> + </h3> + {% endifequal %} + </div> + <div class="panel-body"> + <div class="row"> + <div class="col-xs-4 col-sm-4"> + <p><strong>{% trans "Status" %}:</strong></p> </div> - <div class="panel-body"> - <div class="row"> - <div class="col-xs-4 col-sm-4"> - <p><strong>{% trans "Status:" %}</strong></p> - </div> - <div class="col-xs-4 col-sm-6"> - {% if compute.status %} - <p>{% trans "Connected" %}</p> - {% else %} - <p>{% trans "Not Connected" %}</p> - {% endif %} - {% if compute.details %} - <p>{% trans compute.details %}</p> - {% else %} - <p>{% trans "No details available" %}</p> - {% endif %} - </div> - </div> - - <!-- Modal Edit --> - <div class="modal fade" id="editHost{{ compute.id }}" tabindex="-1" role="dialog" aria-labelledby="editHostLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Edit connection" %}</h4> - </div> - {% ifequal compute.type 1 %} - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> - - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Label" %}</label> - <div class="col-sm-6"> - <input type="hidden" name="host_id" value="{{ compute.id }}"> - <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-zA-Z0-9\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "FQDN / IP" %}</label> - <div class="col-sm-6"> - <input type="text" name="hostname" class="form-control" value="{{ compute.hostname }}" required pattern="[a-z0-9\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Username" %}</label> - <div class="col-sm-6"> - <input type="text" name="login" class="form-control" value="{{ compute.login }}"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Password" %}</label> - <div class="col-sm-6"> - <input type="password" name="password" class="form-control" value="{{ compute.password }}"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Details" %}</label> - <div class="col-sm-6"> - <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> - </div> - </div></div> - <div class="modal-footer"> - <button type="submit" class="pull-left btn btn-danger" name="host_del"> - {% trans "Delete" %} - </button> - <button type="button" class="btn btn-default" data-dismiss="modal"> - {% trans "Close" %} - </button> - <button type="submit" class="btn btn-primary" name="host_edit"> - {% trans "Change" %} - </button> - </div> - </form> - {% endifequal %} - {% ifequal compute.type 2 %} - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> - <p class="modal-body">{% trans "Need create ssh <a href='https://github.com/retspen/webvirtmgr/wiki/Setup-SSH-Authorization'>authorization key</a>. If you have another SSH port on your server, you can add IP:PORT like '192.168.1.1:2222'." %}</p> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Label" %}</label> - <div class="col-sm-6"> - <input type="hidden" name="host_id" value="{{ compute.id }}"> - <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "FQDN / IP" %}</label> - <div class="col-sm-6"> - <input type="text" name="hostname" class="form-control" value="{{ compute.hostname }}" required pattern="[a-z0-9\:\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Username" %}</label> - <div class="col-sm-6"> - <input type="text" name="login" class="form-control" value="{{ compute.login }}"> - <input type="hidden" name="password" value="{{ compute.password }}"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Details" %}</label> - <div class="col-sm-6"> - <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> - </div> - </div> - </div> - <div class="modal-footer"> - <button type="submit" class="pull-left btn btn-danger" name="host_del"> - {% trans "Delete" %} - </button> - <button type="button" class="btn btn-default" data-dismiss="modal"> - {% trans "Close" %} - </button> - <button type="submit" class="btn btn-primary" name="host_edit"> - {% trans "Change" %} - </button> - - </div> - </form> - {% endifequal %} - {% ifequal compute.type 3 %} - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Label" %}</label> - <div class="col-sm-6"> - <input type="hidden" name="host_id" value="{{ compute.id }}"> - <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "FQDN / IP" %}</label> - <div class="col-sm-6"> - <input type="text" name="hostname" class="form-control" value="{{ compute.hostname }}" required pattern="[a-z0-9\:\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Username" %}</label> - <div class="col-sm-6"> - <input type="text" name="login" class="form-control" placeholder="{% trans "Name" %}"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Password" %}</label> - <div class="col-sm-6"> - <input type="password" name="password" class="form-control" value="{{ compute.password }}"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Details" %}</label> - <div class="col-sm-6"> - <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> - </div> - </div> - </div> - <div class="modal-footer"> - <button type="submit" class="pull-left btn btn-danger" name="host_del"> - {% trans "Delete" %} - </button> - <button type="button" class="btn btn-default" data-dismiss="modal"> - {% trans "Close" %} - </button> - <button type="submit" class="btn btn-primary" name="host_edit"> - {% trans "Change" %} - </button> - </div> - </form> - {% endifequal %} - {% ifequal compute.type 4 %} - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Label" %}</label> - <div class="col-sm-6"> - <input type="hidden" name="host_id" value="{{ compute.id }}"> - <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label">{% trans "Details" %}</label> - <div class="col-sm-6"> - <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> - </div> - </div> - </div> - <div class="modal-footer"> - <button type="submit" class="pull-left btn btn-danger" name="host_del"> - {% trans "Delete" %} - </button> - <button type="button" class="btn btn-default" data-dismiss="modal"> - {% trans "Close" %} - </button> - <button type="submit" class="btn btn-primary" name="host_edit"> - {% trans "Change" %} - </button> - </div> - </form> - {% endifequal %} - </div><!-- /.modal-content --> - </div><!-- /.modal-dialog --> - </div><!-- /.modal --> - + <div class="col-xs-4 col-sm-6"> + {% if compute.status %} + <p>{% trans "Connected" %}</p> + {% else %} + <p>{% trans "Not Connected" %}</p> + {% endif %} + {% if compute.details %} + <p>{% trans compute.details %}</p> + {% else %} + <p>{% trans "No details available" %}</p> + {% endif %} </div> </div> + + <!-- Modal Edit --> + <div class="modal fade" id="editHost{{ compute.id }}" tabindex="-1" role="dialog" aria-labelledby="editHostLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Edit connection" %}</h4> + </div> + {% ifequal compute.type 1 %} + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Label" %}</label> + <div class="col-sm-6"> + <input type="hidden" name="host_id" value="{{ compute.id }}"> + <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-zA-Z0-9\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "FQDN / IP" %}</label> + <div class="col-sm-6"> + <input type="text" name="hostname" class="form-control" value="{{ compute.hostname }}" required pattern="[a-z0-9\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Username" %}</label> + <div class="col-sm-6"> + <input type="text" name="login" class="form-control" value="{{ compute.login }}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Password" %}</label> + <div class="col-sm-6"> + <input type="password" name="password" class="form-control" value="{{ compute.password }}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Details" %}</label> + <div class="col-sm-6"> + <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> + </div> + </div></div> + <div class="modal-footer"> + <button type="submit" class="pull-left btn btn-danger" name="host_del"> + {% trans "Delete" %} + </button> + <button type="button" class="btn btn-default" data-dismiss="modal"> + {% trans "Close" %} + </button> + <button type="submit" class="btn btn-primary" name="host_edit"> + {% trans "Change" %} + </button> + </div> + </form> + {% endifequal %} + {% ifequal compute.type 2 %} + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + <p class="modal-body">{% trans "Need create ssh <a href='https://github.com/retspen/webvirtmgr/wiki/Setup-SSH-Authorization'>authorization key</a>. If you have another SSH port on your server, you can add IP:PORT like '192.168.1.1:2222'." %}</p> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Label" %}</label> + <div class="col-sm-6"> + <input type="hidden" name="host_id" value="{{ compute.id }}"> + <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "FQDN / IP" %}</label> + <div class="col-sm-6"> + <input type="text" name="hostname" class="form-control" value="{{ compute.hostname }}" required pattern="[a-z0-9\:\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Username" %}</label> + <div class="col-sm-6"> + <input type="text" name="login" class="form-control" value="{{ compute.login }}"> + <input type="hidden" name="password" value="{{ compute.password }}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Details" %}</label> + <div class="col-sm-6"> + <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="submit" class="pull-left btn btn-danger" name="host_del"> + {% trans "Delete" %} + </button> + <button type="button" class="btn btn-default" data-dismiss="modal"> + {% trans "Close" %} + </button> + <button type="submit" class="btn btn-primary" name="host_edit"> + {% trans "Change" %} + </button> + + </div> + </form> + {% endifequal %} + {% ifequal compute.type 3 %} + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Label" %}</label> + <div class="col-sm-6"> + <input type="hidden" name="host_id" value="{{ compute.id }}"> + <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "FQDN / IP" %}</label> + <div class="col-sm-6"> + <input type="text" name="hostname" class="form-control" value="{{ compute.hostname }}" required pattern="[a-z0-9\:\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Username" %}</label> + <div class="col-sm-6"> + <input type="text" name="login" class="form-control" placeholder="{% trans "Name" %}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Password" %}</label> + <div class="col-sm-6"> + <input type="password" name="password" class="form-control" value="{{ compute.password }}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Details" %}</label> + <div class="col-sm-6"> + <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="submit" class="pull-left btn btn-danger" name="host_del"> + {% trans "Delete" %} + </button> + <button type="button" class="btn btn-default" data-dismiss="modal"> + {% trans "Close" %} + </button> + <button type="submit" class="btn btn-primary" name="host_edit"> + {% trans "Change" %} + </button> + </div> + </form> + {% endifequal %} + {% ifequal compute.type 4 %} + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Label" %}</label> + <div class="col-sm-6"> + <input type="hidden" name="host_id" value="{{ compute.id }}"> + <input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label">{% trans "Details" %}</label> + <div class="col-sm-6"> + <input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}"> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="submit" class="pull-left btn btn-danger" name="host_del"> + {% trans "Delete" %} + </button> + <button type="button" class="btn btn-default" data-dismiss="modal"> + {% trans "Close" %} + </button> + <button type="submit" class="btn btn-primary" name="host_edit"> + {% trans "Change" %} + </button> + </div> + </form> + {% endifequal %} + </div><!-- /.modal-content --> + </div><!-- /.modal-dialog --> + </div><!-- /.modal --> </div> - {% endfor %} - {% else %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Computes" %} - </div> - </div> - {% endif %} - </div> + </div> + </div> + {% endfor %} + {% else %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning" %}:</strong> {% trans "Hypervisor doesn't have any Computes" %} + </div> + </div> + {% endif %} + </div> {% endblock %} diff --git a/computes/templates/overview.html b/computes/templates/overview.html index 9418b20..81398b9 100644 --- a/computes/templates/overview.html +++ b/computes/templates/overview.html @@ -3,107 +3,107 @@ {% load staticfiles %} {% block title %}{% trans "Overview" %} - {{ compute.name }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - <h1 class="page-header">{{ compute.name }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> {% trans "Overview" %} - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> - </div> - </div> - <!-- /.row --> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + <h1 class="page-header">{{ compute.name }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> {% trans "Overview" %} + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> - {% include 'errors_block.html' %} + {% include 'errors_block.html' %} - <div class="row" id="max-width-page"> - <h3 class="page-header">{% trans "Basic details" %}</h3> - <div class="col-xs-4 col-sm-3"> - <p>{% trans "Hostname" %}</p> - <p>{% trans "Hypervisors" %}</p> - <p>{% trans "Emulator" %}</p> - <p>{% trans "Version" %}</p> - <p>{% trans "Memory" %}</p> - <p>{% trans "Architecture" %}</p> - <p>{% trans "Logical CPUs" %}</p> - <p>{% trans "Processor" %}</p> - <p>{% trans "Connection" %}</p> - <p>{% trans "Details" %}</p> + <div class="row" id="max-width-page"> + <h3 class="page-header">{% trans "Basic details" %}</h3> + <div class="col-xs-4 col-sm-3"> + <p>{% trans "Hostname" %}</p> + <p>{% trans "Hypervisors" %}</p> + <p>{% trans "Emulator" %}</p> + <p>{% trans "Version" %}</p> + <p>{% trans "Memory" %}</p> + <p>{% trans "Architecture" %}</p> + <p>{% trans "Logical CPUs" %}</p> + <p>{% trans "Processor" %}</p> + <p>{% trans "Connection" %}</p> + <p>{% trans "Details" %}</p> + </div> + <div class="col-xs-8 col-sm-9"> + <p>{{ hostname }}</p> + <p>{% for arch, hpv in hypervisor.items %} + <span class="glyphicon glyphicon-chevron-right"></span> + <span class="label label-default">{{ arch }}</span> + {% for h in hpv %} + <span class="label label-primary">{{ h }}</span> + {% endfor %} + {% endfor %} + </p> + <p>{{ emulator }}</p> + <p> + <span class="label label-default">Qemu</span> + <span class="label label-primary">{{ version }}</span> + <span class="label label-default">Libvirt</span> + <span class="label label-primary">{{ lib_version }}</span> + </p> + <p>{{ host_memory|filesizeformat }}</p> + <p>{{ host_arch }}</p> + <p>{{ logical_cpu }}</p> + <p>{{ model_cpu }}</p> + <p>{{ uri_conn }}</p> + <p>{{ compute.details }}</p> + </div> + </div> + <div class="row"> + <div class="col-lg-12"> + <h3 class="page-header">{% trans "Performance" %}</h3> + <div class="panel panel-success"> + <div class="panel-heading"> + <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "CPU Utilization" %}</h3> </div> - <div class="col-xs-8 col-sm-9"> - <p>{{ hostname }}</p> - <p>{% for arch, hpv in hypervisor.items %} - <span class="glyphicon glyphicon-chevron-right"></span> - <span class="label label-default">{{ arch }}</span> - {% for h in hpv %} - <span class="label label-primary">{{ h }}</span> - {% endfor %} - {% endfor %} - </p> - <p>{{ emulator }}</p> - <p> - <span class="label label-default">{% trans 'Qemu' %} </span> - <span class="label label-primary">{{ version }}</span> - <span class="label label-default">{% trans 'Libvirt' %} </span> - <span class="label label-primary">{{ lib_version }}</span> - </p> - <p>{{ host_memory|filesizeformat }}</p> - <p>{{ host_arch }}</p> - <p>{{ logical_cpu }}</p> - <p>{{ model_cpu }}</p> - <p>{{ uri_conn }}</p> - <p>{{ compute.details }}</p> - </div> - </div> - <div class="row"> - <div class="col-lg-12"> - <h3 class="page-header">{% trans "Performance" %}</h3> - <div class="panel panel-success"> - <div class="panel-heading"> - <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "CPU Utilization" %}</h3> - </div> - <div class="panel-body"> - <div class="flot-chart"> - <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> - <canvas id="cpuChart" width="735" height="160"></canvas> - </div> - </div> - </div> - </div> - <div class="panel panel-info"> - <div class="panel-heading"> - <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "RAM Utilization" %}</h3> - </div> - <div class="panel-body"> - <div class="flot-chart"> - <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> - <canvas id="memChart" width="735" height="160"></canvas> - </div> - </div> + <div class="panel-body"> + <div class="flot-chart"> + <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> + <canvas id="cpuChart" width="735" height="160"></canvas> </div> </div> </div> </div> + <div class="panel panel-info"> + <div class="panel-heading"> + <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "RAM Utilization" %}</h3> + </div> + <div class="panel-body"> + <div class="flot-chart"> + <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> + <canvas id="memChart" width="735" height="160"></canvas> + </div> + </div> + </div> + </div> + </div> + </div> {% endblock %} {% block script %} <script src="{% static "js/Chart.bundle.min.js" %}"></script> diff --git a/create/templates/create_flav_block.html b/create/templates/create_flav_block.html index 979599f..26df5ca 100644 --- a/create/templates/create_flav_block.html +++ b/create/templates/create_flav_block.html @@ -17,7 +17,6 @@ <form class="form-horizontal" method="post" role="form">{% csrf_token %} <div class="form-group"> <label class="col-sm-3 control-label">{% trans "Name" %}</label> - <div class="col-sm-6"> <input type="text" name="label" class="form-control" placeholder="Micro" maxlength="20" required pattern="[a-zA-Z0-9]+"> @@ -25,7 +24,6 @@ </div> <div class="form-group"> <label class="col-sm-3 control-label">{% trans "VCPU" %}</label> - <div class="col-sm-6"> <input type="text" class="form-control" name="vcpu" value="1" maxlength="1" required pattern="[0-9]"> @@ -33,7 +31,6 @@ </div> <div class="form-group"> <label class="col-sm-3 control-label">{% trans "RAM" %}</label> - <div class="col-sm-6"> <input type="text" class="form-control" name="memory" value="512" maxlength="5" required pattern="[0-9]+"> @@ -42,7 +39,6 @@ </div> <div class="form-group"> <label class="col-sm-3 control-label">{% trans "HDD" %}</label> - <div class="col-sm-6"> <input type="text" class="form-control" name="disk" value="10" maxlength="3" required pattern="[0-9]+"> diff --git a/create/templates/create_instance.html b/create/templates/create_instance.html index fb0a6f1..6580cd5 100644 --- a/create/templates/create_instance.html +++ b/create/templates/create_instance.html @@ -224,7 +224,7 @@ <button class="btn btn-primary disabled">{% trans "Create" %}</button> {% endif %} </div> - </form> + </form> </div> </div> </div> @@ -436,7 +436,6 @@ </div> <label class="col-sm-1 control-label">{% trans "MB" %}</label> </div> - <div class="form-group"> <label class="col-sm-3 control-label">{% trans "HDD" %}</label> <input id="images" name="images" type="hidden" value=""/> @@ -582,8 +581,7 @@ </div> <div class="clearfix"></div> </div> - </div> - <!-- /Tab panes --> + </div><!-- /Tab panes --> </div> {% endblock %} @@ -607,7 +605,6 @@ } $(document).ready(function () { - $('#image-control').multiselect({ disableIfEmpty: true, enableCaseInsensitiveFiltering: true, @@ -716,7 +713,6 @@ function get_disk_bus_choices(compute_id, dev_idx, disk_type){ get_diskBus_url = "/computes/" + compute_id + "/disk/" + disk_type + "/buses"; - $.getJSON(get_diskBus_url, function (data) { $("#bus" + dev_idx).find('option').remove(); $.each(data['bus'], function(i, item) { diff --git a/instances/templates/add_instance_volume.html b/instances/templates/add_instance_volume.html index 9ae808a..ba2f978 100644 --- a/instances/templates/add_instance_volume.html +++ b/instances/templates/add_instance_volume.html @@ -1,121 +1,62 @@ {% load i18n %} {% if request.user.is_superuser %} -<a href="#addvol" type="button" class="btn btn-success pull-right" data-toggle="modal" title="Add Volume"> - <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> -</a> + <a href="#addvol" type="button" class="btn btn-success pull-right" data-toggle="modal" title="Add Volume"> + <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> + </a> -<!-- Modal pool --> -<div class="modal fade" id="addvol" tabindex="-1" role="dialog" aria-labelledby="addInstanceVolumeLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Add Instance Volume" %}</h4> - </div> - <div class="modal-body"> - <div class="row"> - <ul class="nav nav-tabs"> - <li role="presentation" class="active"><a href="#NewDisk" data-toggle="tab">{% trans 'New Disk' %}</a></li> - <li role="presentation"><a href="#ExistingDisk" data-toggle="tab">{% trans 'Existing Disk' %}</a></li> - </ul> + <!-- Modal pool --> + <div class="modal fade" id="addvol" tabindex="-1" role="dialog" aria-labelledby="addInstanceVolumeLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Add Instance Volume" %}</h4> + </div> + <div class="modal-body"> + <div class="row"> + <ul class="nav nav-tabs"> + <li role="presentation" class="active"><a href="#NewDisk" data-toggle="tab">{% trans 'New Disk' %}</a></li> + <li role="presentation"><a href="#ExistingDisk" data-toggle="tab">{% trans 'Existing Disk' %}</a></li> + </ul> - <div class="tab-content"> - <div class="tab-pane active" id="NewDisk"> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="tab-content"> + <div class="tab-pane active" id="NewDisk"> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <p style="font-weight:bold;">{% trans "Volume parameters" %}</p> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Storage" %}</label> - <div class="col-sm-4"> - <select name="storage" class="form-control image-format"> - {% for storage in storages %} - <option value="{{ storage }}">{{ storage }}</option> - {% endfor %} - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Name" %}</label> - <div class="col-sm-4"> - <input type="text" class="form-control" name="name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Format" %}</label> - <div class="col-sm-4"> - <select name="format" class="form-control image-format"> - {% for format in formats %} - <option value="{{ format }}" {% if format == default_format %}selected{% endif %}>{% trans format %}</option> - {% endfor %} - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Size" %}</label> - <div class="col-sm-4"> - <input type="text" class="form-control" name="size" value="10" maxlength="5" required pattern="[0-9]+"> - </div> - <label class="col-sm-1 control-label">{% trans "GB" %}</label> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Bus" %}</label> - <div class="col-sm-4"> - <select name="bus" class="form-control image-format"> - {% for bus in busses %} - <option value="{{ bus }}" {% if bus == default_bus %}selected{% endif %}>{% trans bus %}</option> - {% endfor %} - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Cache" %}</label> - <div class="col-sm-4"> - <select name="cache" class="form-control image-format"> - {% for mode, name in cache_modes %} - <option value="{{ mode }}" {% if mode == default_cache %}selected{% endif %}>{% trans name %}</option> - {% endfor %} - </select> - </div> - </div> - <div class="form-group meta-prealloc"> - <label class="col-sm-3 control-label">{% trans "Metadata" %}</label> - <div class="col-sm-4"> - <input type="checkbox" name="meta_prealloc" value="true"> - </div> - </div> - <div class="modal-footer"> - <button type="submit" class="btn btn-lg btn-success pull-right" name="add_new_vol">{% trans "Add Volume" %}</button> - </div> - </form> - </div> - <div class="tab-pane" id="ExistingDisk"> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> <p style="font-weight:bold;">{% trans "Volume parameters" %}</p> <div class="form-group"> <label class="col-sm-3 control-label">{% trans "Storage" %}</label> <div class="col-sm-4"> - <div class="dropdown"> - <button id="select_storage" class="btn btn-default dropdown-toggle form-control" type="button" data-toggle="dropdown">{% trans 'Select Pool...' %} - <span class="caret"></span></button> - <ul class="dropdown-menu"> - {% for storage in storages %} - <li><a href="#" onclick="get_volumes({{ compute_id }}, '{{ storage }}')">{{ storage }}</a></li> - {% endfor %} - </ul> - <input id="selected_storage" name="selected_storage" hidden/> - </div> + <select name="storage" class="form-control image-format"> + {% for storage in storages %} + <option value="{{ storage }}">{{ storage }}</option> + {% endfor %} + </select> </div> </div> <div class="form-group"> - <label class="col-sm-3 control-label" >{% trans "Volume" %}</label> + <label class="col-sm-3 control-label">{% trans "Name" %}</label> <div class="col-sm-4"> - <select id="vols" name="vols" class="form-control" disabled> - <option value="" selected>{% trans 'None' %}</option> - <!-- populate with javascript --> + <input type="text" class="form-control" name="name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Format" %}</label> + <div class="col-sm-4"> + <select name="format" class="form-control image-format"> + {% for format in formats %} + <option value="{{ format }}" {% if format == default_format %}selected{% endif %}>{% trans format %}</option> + {% endfor %} </select> </div> </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Size" %}</label> + <div class="col-sm-4"> + <input type="text" class="form-control" name="size" value="10" maxlength="5" required pattern="[0-9]+"> + </div> + <label class="col-sm-1 control-label">{% trans "GB" %}</label> + </div> <div class="form-group"> <label class="col-sm-3 control-label">{% trans "Bus" %}</label> <div class="col-sm-4"> @@ -136,16 +77,75 @@ </select> </div> </div> + <div class="form-group meta-prealloc"> + <label class="col-sm-3 control-label">{% trans "Metadata" %}</label> + <div class="col-sm-4"> + <input type="checkbox" name="meta_prealloc" value="true"> + </div> + </div> + <div class="modal-footer"> + <button type="submit" class="btn btn-lg btn-success pull-right" name="add_new_vol">{% trans "Add Volume" %}</button> + </div> + </form> </div> - <div class="modal-footer"> - <button type="submit" class="btn btn-lg btn-success pull-right" name="add_existing_vol">{% trans "Add Volume" %}</button> + <div class="tab-pane" id="ExistingDisk"> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + <p style="font-weight:bold;">{% trans "Volume parameters" %}</p> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Storage" %}</label> + <div class="col-sm-4"> + <div class="dropdown"> + <button id="select_storage" class="btn btn-default dropdown-toggle form-control" type="button" data-toggle="dropdown">{% trans 'Select Pool...' %} + <span class="caret"></span></button> + <ul class="dropdown-menu"> + {% for storage in storages %} + <li><a href="#" onclick="get_volumes({{ compute_id }}, '{{ storage }}')">{{ storage }}</a></li> + {% endfor %} + </ul> + <input id="selected_storage" name="selected_storage" hidden/> + </div> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label" >{% trans "Volume" %}</label> + <div class="col-sm-4"> + <select id="vols" name="vols" class="form-control" disabled> + <option value="" selected>{% trans 'None' %}</option> + <!-- populate with javascript --> + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Bus" %}</label> + <div class="col-sm-4"> + <select name="bus" class="form-control image-format"> + {% for bus in busses %} + <option value="{{ bus }}" {% if bus == default_bus %}selected{% endif %}>{% trans bus %}</option> + {% endfor %} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Cache" %}</label> + <div class="col-sm-4"> + <select name="cache" class="form-control image-format"> + {% for mode, name in cache_modes %} + <option value="{{ mode }}" {% if mode == default_cache %}selected{% endif %}>{% trans name %}</option> + {% endfor %} + </select> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="submit" class="btn btn-lg btn-success pull-right" name="add_existing_vol">{% trans "Add Volume" %}</button> + </div> + </form> </div> - </form> </div> - </div> - </div> <!-- row --> - </div> <!-- /.modal-body --> - </div> <!-- /.modal-content --> - </div> <!-- /.modal-dialog --> -</div> <!-- /.modal --> + </div> <!-- row --> + </div> <!-- /.modal-body --> + </div> <!-- /.modal-content --> + </div> <!-- /.modal-dialog --> + </div> <!-- /.modal --> {% endif %} diff --git a/instances/templates/allinstances.html b/instances/templates/allinstances.html index 134c21b..0703bce 100644 --- a/instances/templates/allinstances.html +++ b/instances/templates/allinstances.html @@ -6,140 +6,140 @@ <link rel="stylesheet" href="{% static "css/sortable-theme-bootstrap.css" %}" /> {% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% if request.user.is_superuser %} - {% include 'create_inst_block.html' %} - {% endif %} - {% if all_host_vms or all_user_vms %} - <div class="pull-right search"> - <input id="filter" class="form-control" type="text" placeholder="Search"> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% if request.user.is_superuser %} + {% include 'create_inst_block.html' %} + {% endif %} + {% if all_host_vms or all_user_vms %} + <div class="pull-right search"> + <input id="filter" class="form-control" type="text" placeholder="Search"> + </div> + {% endif %} + <h1 class="page-header">{% trans "Instances" %}</h1> + </div> + </div> + <!-- /.row --> + + {% include 'errors_block.html' %} + + <div class="row"> + <div class="col-lg-12"> + <div class="table-responsive"> + {% if request.user.is_superuser %} + {% if not all_host_vms %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %} </div> - {% endif %} - <h1 class="page-header">{% trans "Instances" %}</h1> - </div> - </div> - <!-- /.row --> - - {% include 'errors_block.html' %} - - <div class="row"> - <div class="col-lg-12"> - <div class="table-responsive"> - {% if request.user.is_superuser %} - {% if not all_host_vms %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %} - </div> - </div> - {% else %} - {% ifequal view_style "nongrouped" %} - {% include 'allinstances_index_nongrouped.html' %} - {% endifequal %} - {% ifequal view_style "grouped" %} - {% include 'allinstances_index_grouped.html' %} - {% endifequal %} - {% endif %} - {% else %} - {% if not all_user_vms %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %} - </div> - </div> - {% else %} - <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> - <thead> - <tr> - <th>{% trans 'Name' %}</th> - <th>{% trans 'Status' %}</th> - <th>{% trans 'VCPU' %}</th> - <th>{% trans 'Memory' %}</th> - <th data-sortable="false" style="width: 165px;">{% trans 'Actions' %}</th> - </tr> - </thead> - <tbody class="searchable"> - {% for inst, vm in all_user_vms.items %} - <tr> - <td><a href="{% url 'instance' vm.compute_id vm.name %}">{{ vm.name }}</a><br><small><em>{{ vm.title }}</em></small></td> - <td>{% ifequal vm.status 1 %} - <span class="text-success">{% trans "Active" %}</span> - {% endifequal %} - {% ifequal vm.status 5 %} - <span class="text-danger">{% trans "Off" %}</span> - {% endifequal %} - {% ifequal vm.status 3 %} - <span class="text-warning">{% trans "Suspend" %}</span> - {% endifequal %} - </td> - <td>{{ vm.vcpu }}</td> - <td>{{ vm.memory }} {% trans "MB" %}</td> - <td><form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="name" value="{{ vm.name }}"/> - <input type="hidden" name="compute_id" value="{{ vm.compute_id }}"/> - {% ifequal vm.status 5 %} - {% if inst.instance.is_template %} - <button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ vm.compute_id }}, '{{ vm.name }}');"> - <span class="glyphicon glyphicon-duplicate"></span> - </button> - {% else %} - <button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - {% endif %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal vm.status 3 %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC/Spice Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal vm.status 1 %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ vm.compute_id }}-{{ vm.uuid }}")' title="{% trans "Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </a> - {% endifequal %} - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - {% endif %} - {% endif %} </div> - </div> - </div> + {% else %} + {% ifequal view_style "nongrouped" %} + {% include 'allinstances_index_nongrouped.html' %} + {% endifequal %} + {% ifequal view_style "grouped" %} + {% include 'allinstances_index_grouped.html' %} + {% endifequal %} + {% endif %} + {% else %} + {% if not all_user_vms %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning" %}:</strong> {% trans "You don't have any Instance" %} + </div> + </div> + {% else %} + <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th>{% trans 'Name' %}</th> + <th>{% trans 'Status' %}</th> + <th>{% trans 'VCPU' %}</th> + <th>{% trans 'Memory' %}</th> + <th data-sortable="false" style="width: 165px;">{% trans 'Actions' %}</th> + </tr> + </thead> + <tbody class="searchable"> + {% for inst, vm in all_user_vms.items %} + <tr> + <td><a href="{% url 'instance' vm.compute_id vm.name %}">{{ vm.name }}</a><br><small><em>{{ vm.title }}</em></small></td> + <td>{% ifequal vm.status 1 %} + <span class="text-success">{% trans "Active" %}</span> + {% endifequal %} + {% ifequal vm.status 5 %} + <span class="text-danger">{% trans "Off" %}</span> + {% endifequal %} + {% ifequal vm.status 3 %} + <span class="text-warning">{% trans "Suspend" %}</span> + {% endifequal %} + </td> + <td>{{ vm.vcpu }}</td> + <td>{{ vm.memory }} {% trans "MB" %}</td> + <td><form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="name" value="{{ vm.name }}"/> + <input type="hidden" name="compute_id" value="{{ vm.compute_id }}"/> + {% ifequal vm.status 5 %} + {% if inst.instance.is_template %} + <button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ vm.compute_id }}, '{{ vm.name }}');"> + <span class="glyphicon glyphicon-duplicate"></span> + </button> + {% else %} + <button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + {% endif %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal vm.status 3 %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "VNC/Spice Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal vm.status 1 %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ vm.compute_id }}-{{ vm.uuid }}")' title="{% trans "Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </a> + {% endifequal %} + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + {% endif %} + {% endif %} + </div> + </div> + </div> {% endblock %} {% block script %} <script src="{% static "js/sortable.min.js" %}"></script> diff --git a/instances/templates/allinstances_index_grouped.html b/instances/templates/allinstances_index_grouped.html index 209610f..645ccf4 100644 --- a/instances/templates/allinstances_index_grouped.html +++ b/instances/templates/allinstances_index_grouped.html @@ -3,7 +3,7 @@ <thead> <tr> <th><a href="#" id="hide_all_instances" onclick="hide_all_host_instances()">#</a> </th> - <th>{% trans "Name" %}<br>{% trans "Description" %}</th></th> + <th>{% trans "Name" %}<br>{% trans "Description" %}</th> <th>{% trans "User"%}</th> <th>{% trans "Status" %}</th> <th>{% trans "VCPU" %}</th> diff --git a/instances/templates/allinstances_index_nongrouped.html b/instances/templates/allinstances_index_nongrouped.html index dc98ed5..33d6c5c 100644 --- a/instances/templates/allinstances_index_nongrouped.html +++ b/instances/templates/allinstances_index_nongrouped.html @@ -2,11 +2,11 @@ <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> <thead> <tr> - <th>Name<br>Description</th> - <th>Host<br>User</th> - <th>Status</th> - <th>VCPU</th> - <th>Memory</th> + <th>{% trans "Name" %}<br>{% trans "Description" %}</th> + <th>{% trans "Host" %}<br>{% trans "User"%}</th> + <th>{% trans "Status" %}</th> + <th>{% trans "VCPU" %}</th> + <th>{% trans "Memory" %}</th> <th data-sortable="false" style="width:205px;">{% trans "Actions" %}</th> </tr> </thead> diff --git a/instances/templates/instance.html b/instances/templates/instance.html index f0464b6..3391569 100644 --- a/instances/templates/instance.html +++ b/instances/templates/instance.html @@ -3,1335 +3,1334 @@ {% load i18n %} {% block title %}{% trans "Instance" %} - {{ vname }}{% endblock %} {% block content %} - {% include 'pleasewaitdialog.html' %} - <!-- Page Heading --> - <div class="row"> - <div> - <h3> - {{ vname }}{% if title %} ({{ title }}){% endif %} - </h3> - </div> - <div> - <div> - {% ifequal status 5 %} - <span class="label label-danger">{% trans "Off" %}</span> - {% endifequal %} - {% ifequal status 1 %} - <span class="label label-success">{% trans "Active" %}</span> - {% endifequal %} - {% ifequal status 3 %} - <span class="label label-warning">{% trans "Suspend" %}</span> - {% endifequal %} - | - {% if cur_vcpu %} - {{ cur_vcpu }} {% trans "Vcpu" %} - {% else %} - {{ vcpu }} {% trans "Vcpu" %} - {% endif %} - | - {{ cur_memory }} {% trans "MB" %} {% trans "Ram" %} - | - {% for disk in disks %} - {{ disk.size|filesizeformat }} {% trans "Disk" %} | - {% endfor %} - <a href="{% url 'instance' compute.id vname %}" type="button" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-refresh"></span></a> - <em>on</em> - <a href="{% url 'overview' compute.id %}"><span class="label label-primary">{{ compute.name }}{% if compute.name != compute.hostname %} - {{ compute.hostname }}{% endif %} </span></a> - </div> - </div> - {% if user_quota_msg %} - <span class="label label-warning">{{ user_quota_msg|capfirst }} {% trans "quota reached" %}.</span> + {% include 'pleasewaitdialog.html' %} + <!-- Page Heading --> + <div class="row"> + <div> + <h3> + {{ vname }}{% if title %} ({{ title }}){% endif %} + </h3> + </div> + <div> + <div> + {% ifequal status 5 %} + <span class="label label-danger">{% trans "Off" %}</span> + {% endifequal %} + {% ifequal status 1 %} + <span class="label label-success">{% trans "Active" %}</span> + {% endifequal %} + {% ifequal status 3 %} + <span class="label label-warning">{% trans "Suspend" %}</span> + {% endifequal %} + | + {% if cur_vcpu %} + {{ cur_vcpu }} {% trans "Vcpu" %} + {% else %} + {{ vcpu }} {% trans "Vcpu" %} + {% endif %} + | + {{ cur_memory }} {% trans "MB" %} {% trans "Ram" %} + | + {% for disk in disks %} + {{ disk.size|filesizeformat }} {% trans "Disk" %} | + {% endfor %} + <a href="{% url 'instance' compute.id vname %}" type="button" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-refresh"></span></a> + <em>on</em> + <a href="{% url 'overview' compute.id %}"><span class="label label-primary">{{ compute.name }}{% if compute.name != compute.hostname %} - {{ compute.hostname }}{% endif %} </span></a> + </div> + </div> + {% if user_quota_msg %} + <span class="label label-warning">{{ user_quota_msg|capfirst }} {% trans "quota reached" %}.</span> + {% endif %} + <hr> + </div> + + {% include 'errors_block.html' %} + {% include 'messages_block.html' %} + + <div class="row" id="max-width-page"> + <div class="col-lg-12"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-pills" role="tablist" id="navbtn"> + <li role="presentation" class="active"> + <a href="#power" class="action-button" aria-controls="power" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-off" aria-hidden="true"></span> + {% trans "Power" %} + </a> + </li> + <li role="presentation"> + <a href="#access" class="action-button" aria-controls="access" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-lock" aria-hidden="true"></span> + {% trans "Access" %} + </a> + </li> + <li role="presentation"> + <a href="#resize" class="action-button" aria-controls="resize" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-resize-full" aria-hidden="true"></span> + {% trans "Resize" %} + </a> + </li> + {% if allow_admin_or_not_template %} + <li role="presentation"> + <a href="#snapshots" class="action-button" aria-controls="snapshots" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-camera" aria-hidden="true"></span> + {% trans "Snapshots" %} + </a> + </li> {% endif %} - <hr> - </div> - - {% include 'errors_block.html' %} - {% include 'messages_block.html' %} - - - <div class="row" id="max-width-page"> - <div class="col-lg-12"> + <li role="presentation"> + <a href="#settings" class="action-button" aria-controls="settings" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-cog" aria-hidden="true"></span> + {% trans "Settings" %} + </a> + </li> + <li role="presentation"> + <a href="#graphics" id="chartgraphs" class="action-button" aria-controls="graphics" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-stats" aria-hidden="true"></span> + {% trans "Stats" %} + </a> + </li> + <li role="presentation"> + <a href="#undefine" class="action-button" aria-controls="undefine" role="tab" data-toggle="tab"> + <span id="action-block" class="glyphicon glyphicon-trash" aria-hidden="true"></span> + {% trans "Destroy" %} + </a> + </li> + </ul> + <!-- Tab panes --> + <div class="tab-content"> + <div role="tabpanel" class="tab-pane active" id="power"> <div role="tabpanel"> <!-- Nav tabs --> - <ul class="nav nav-pills" role="tablist" id="navbtn"> - <li role="presentation" class="active"> - <a href="#power" class="action-button" aria-controls="power" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-off" aria-hidden="true"></span> - {% trans "Power" %} - </a> - </li> - <li role="presentation"> - <a href="#access" class="action-button" aria-controls="access" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-lock" aria-hidden="true"></span> - {% trans "Access" %} - </a> - </li> - <li role="presentation"> - <a href="#resize" class="action-button" aria-controls="resize" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-resize-full" aria-hidden="true"></span> - {% trans "Resize" %} - </a> - </li> - {% if allow_admin_or_not_template %} - <li role="presentation"> - <a href="#snapshots" class="action-button" aria-controls="snapshots" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-camera" aria-hidden="true"></span> - {% trans "Snapshots" %} + <ul class="nav nav-tabs" role="tablist"> + {% ifequal status 1 %} + <li role="presentation" class="active"> + <a href="#poweroff" aria-controls="poweroff" role="tab" data-toggle="tab"> + {% trans "Power Off" %} </a> </li> + <li role="presentation"> + <a href="#powercycle" aria-controls="powercycle" role="tab" data-toggle="tab"> + {% trans "Power Cycle" %} + </a> + </li> + <li role="presentation"> + <a href="#powerforce" aria-controls="powerforce" role="tab" data-toggle="tab"> + {% trans "Force Off" %} + </a> + </li> + {% if request.user.is_superuser %} + <li role="presentation"> + <a href="#suspend" aria-controls="suspend" role="tab" data-toggle="tab"> + {% trans "Suspend" %} + </a> + </li> + {% endif %} + {% endifequal %} + {% ifequal status 3 %} + {% if request.user.is_superuser %} + <li role="presentation" class="active"> + <a href="#resume" aria-controls="resume" role="tab" data-toggle="tab"> + {% trans "Resume" %} + </a> + </li> + <li role="presentation"> + <a href="#powerforce" aria-controls="powerforce" role="tab" data-toggle="tab"> + {% trans "Force Off" %} + </a> + </li> + {% endif %} + {% endifequal %} + {% ifequal status 5 %} + <li role="presentation" class="active"> + <a href="#boot" aria-controls="boot" role="tab" data-toggle="tab"> + {% trans "Power On" %} + </a> + </li> + {% endifequal %} + </ul> + <!-- Tab panes --> + <div class="tab-content"> + {% ifequal status 1 %} + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="poweroff"> + <p>{% trans "This action sends an ACPI shutdown signal to the instance." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <input type="submit" name="poweroff" class="btn btn-lg btn-success pull-right" value="{% trans "Power Off" %}"> + <div class="clearfix"></div> + </form> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="powercycle"> + <p>{% trans "This action forcibly powers off and start the instance and may cause data corruption." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <input type="submit" name="powercycle" class="btn btn-lg btn-success pull-right" value="{% trans "Power Cycle" %}"> + <div class="clearfix"></div> + </form> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="powerforce"> + <p>{% trans "This action forcibly powers off the instance and may cause data corruption." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <input type="submit" name="powerforce" class="btn btn-lg btn-success pull-right" value="{% trans "Force Off" %}"> + <div class="clearfix"></div> + </form> + </div> + {% if request.user.is_superuser %} + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="suspend"> + <p>{% trans "This action suspends the instance." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <input type="submit" name="suspend" class="btn btn-lg btn-success pull-right" value="{% trans "Suspend" %}"> + <div class="clearfix"></div> + </form> + </div> + {% endif %} + {% endifequal %} + {% ifequal status 3 %} + {% if request.user.is_superuser %} + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resume"> + <p>{% trans "This action restore the instance after suspend." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <input type="submit" name="resume" class="btn btn-lg btn-success pull-right" value="{% trans "Resume" %}"> + <div class="clearfix"></div> + </form> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="powerforce"> + <p>{% trans "This action forcibly powers off the instance and may cause data corruption." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <input type="submit" name="powerforce" class="btn btn-lg btn-success pull-right" value="{% trans "Force Off" %}"> + <div class="clearfix"></div> + </form> + </div> + {% else %} + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resume"> + <p>{% trans "Administrator blocked your instance." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + <button class="btn btn-lg btn-success disabled pull-right">{% trans "Resume" %}</button> + <div class="clearfix"></div> + </form> + </div> + {% endif %} + {% endifequal %} + {% ifequal status 5 %} + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="boot"> + <p>{% trans "Click on Boot button to start this instance." %}</p> + <form action="" method="post" role="form">{% csrf_token %} + {% if instance.is_template %} + <p>{% trans "Template instance cannot be started." %}</p> + <input type="submit" name="poweron" class="btn btn-lg btn-success pull-right disabled" value="{% trans "Power On" %}"> + {% else %} + <input type="submit" name="poweron" class="btn btn-lg btn-success pull-right" value="{% trans "Power On" %}"> {% endif %} + <div class="clearfix"></div> + </form> + </div> + {% endifequal %} + </div> + </div> + </div> + <div role="tabpanel" class="tab-pane" id="access"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-tabs" role="tablist"> + <li role="presentation" class="active"> + <a href="#vnconsole" aria-controls="vnconsole" role="tab" data-toggle="tab"> + {% trans "Console" %} + </a> + </li> + {% if show_access_root_password %} <li role="presentation"> - <a href="#settings" class="action-button" aria-controls="settings" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-cog" aria-hidden="true"></span> - {% trans "Settings" %} + <a href="#rootpasswd" aria-controls="rootpasswd" role="tab" data-toggle="tab"> + {% trans "Root Password" %} + </a> + </li> + {% endif %} + {% if show_access_ssh_keys %} + <li role="presentation"> + <a href="#sshkeys" aria-controls="sshkeys" role="tab" data-toggle="tab"> + {% trans "SSH Keys" %} + </a> + </li> + {% endif %} + {% ifequal status 1 %} + <li role="presentation"> + <a href="#vdiconsole" aria-controls="vdiconsole" role="tab" data-toggle="tab"> + {% trans "VDI" %} + </a> + </li> + {% endifequal %} + </ul> + <!-- Tab panes --> + <div class="tab-content"> + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="vnconsole"> + <p>{% trans "This action opens a new window with a VNC connection to the console of the instance." %}</p> + {% ifequal status 1 %} + <!-- Split button --> + <div class="btn-group pull-right"> + <button type="button" class="btn btn-lg btn-success " onclick="open_console('lite')">Console</button> + <button type="button" class="btn btn-lg btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <span class="caret"></span> + <span class="sr-only">{% trans 'Toggle Dropdown' %}</span> + </button> + <ul class="dropdown-menu"> + <li><a href="#" title="Console port: {{ console_port }}" onclick="open_console('lite')">{% trans "Console - Lite" %}</a></li> + <li><a href="#" title="Console port: {{ console_port }}" onclick="open_console('full')">{% trans "Console - Full" %}</a></li> + </ul> + </div> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled">{% trans "Console" %}</button> + {% endifequal %} + <div class="clearfix"></div> + </div> + {% if show_access_root_password %} + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="rootpasswd"> + <p>{% trans "You need shut down your instance and enter a new root password." %}</p> + <form class="form-inline" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-12"> + <input type="text" class="form-control input-lg" name="passwd" placeholder="{% trans "Enter Password" %}" maxlength="24"> + </div> + </div> + {% ifequal status 5 %} + <input type="submit" class="btn btn-lg btn-success pull-right" name="rootpasswd" value="{% trans "Reset Root Password" %}"> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled">{% trans "Reset Root Password" %}</button> + {% endifequal %} + </form> + <div class="clearfix"></div> + </div> + {% endif %} + {% if show_access_ssh_keys %} + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="sshkeys"> + <p>{% trans "You need shut down your instance and choose your public key." %}</p> + <form class="form-inline" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-12"> + <select name="sshkeyid" class="form-control keyselect"> + {% if publickeys %} + {% for key in publickeys %} + <option value="{{ key.id }}">{{ key.keyname }}</option> + {% endfor %} + {% else %} + <option value="None">{% trans "None" %}</option> + {% endif %} + </select> + </div> + </div> + {% ifequal status 5 %} + <input type="submit" class="btn btn-lg btn-success pull-right" name="addpublickey" value="{% trans "Add Public Key" %}"> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled">{% trans "Add Public Key" %}</button> + {% endifequal %} + </form> + <div class="clearfix"></div> + </div> + {% endif %} + {% ifequal status 1 %} + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="vdiconsole"> + <p>{% trans "This action opens a remote viewer with a connection to the console of the instance." %}</p> + <div class="input-group"> + <input type="text" class="input-lg disabled form-control" disabled id="vdi_url_input"/> + <span class="input-group-btn"> + <a href="#" class="btn btn-lg btn-success" id="vdi_url" >{% trans "VDI" %}</a> + </span> + </div> + <div class="clearfix"></div> + </div> + {% endifequal %} + </div> + </div> + </div> + <div role="tabpanel" class="tab-pane" id="resize"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-tabs" role="tablist"> + <li role="presentation" class="active"> + <a href="#resizevm" aria-controls="resizevm" role="tab" data-toggle="tab"> + {% trans "Resize Instance" %} + </a> + </li> + </ul> + <!-- Tab panes --> + <div class="tab-content"> + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resizevm"> + {% if request.user.is_superuser or request.user.is_staff or userinstance.is_change %} + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <p style="font-weight:bold;">{% trans "Logical host CPUs" %} : {{ vcpu_host }}</p> + <div class="form-group"> + <label class="col-sm-4 control-label" style="font-weight:normal;"> {% trans "Current allocation" %}</label> + <div class="col-sm-4"> + <select name="cur_vcpu" class="form-control"> + {% for cpu in vcpu_range %} + {% if cur_vcpu %} + <option value="{{ cpu }}" {% if cpu == cur_vcpu %}selected{% endif %}>{{ cpu }}</option> + {% else %} + <option value="{{ cpu }}" {% if cpu == vcpu %}selected{% endif %}>{{ cpu }}</option> + {% endif %} + {% endfor %} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Maximum allocation" %}</label> + <div class="col-sm-4"> + <select name="vcpu" class="form-control"> + {% for cpu in vcpu_range %} + <option value="{{ cpu }}" {% if cpu == vcpu %}selected{% endif %}>{{ cpu }}</option> + {% endfor %} + </select> + </div> + </div> + <p style="font-weight:bold;">{% trans "Total host memory:" %} {{ memory_host|filesizeformat }}</p> + <div class="form-group"> + <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Current allocation" %} ({% trans "MB" %})</label> + <div class="col-sm-4 js-custom__container"> + <select name="cur_memory" class="form-control js-custom__toggle"> + {% for mem in memory_range %} + <option value="{{ mem }}" {% if mem == cur_memory %}selected{% endif %}>{{ mem }}</option> + {% endfor %} + </select> + <input type="text" name="cur_memory_custom" class="form-control js-custom__toggle" style="display: none" /> + <small><input type="checkbox" class="js-custom__checkbox" /> {% trans "Custom value" %}</small> + </div> + </div> + <div class="form-group"> + <label class="col-sm-4 control-label" + style="font-weight:normal;">{% trans "Maximum allocation" %} ({% trans "MB" %})</label> + <div class="col-sm-4 js-custom__container"> + <select name="memory" class="form-control js-custom__toggle"> + {% for mem in memory_range %} + <option value="{{ mem }}" + {% if mem == memory %}selected{% endif %}>{{ mem }}</option> + {% endfor %} + </select> + <input type="text" name="memory_custom" class="form-control js-custom__toggle" style="display: none" /> + <small><input type="checkbox" class="js-custom__checkbox" /> {% trans "Custom value" %}</small> + </div> + </div> + <p style="font-weight:bold;">{% trans "Disk allocation (B):" %}</p> + {% for disk in disks %} + <div class="form-group"> + <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Current allocation" %} ({{ disk.dev }})</label> + <div class="col-sm-4 js-custom__container"> + <input type="text" name="disk_size_{{ disk.dev }}" class="form-control" value="{{ disk.size|filesizeformat }}" /> + </div> + </div> + {% endfor %} + {% ifequal status 5 %} + <button type="submit" class="btn btn-lg btn-success pull-right" name="resize">{% trans "Resize" %}</button> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled" name="resize">{% trans "Resize" %}</button> + {% endifequal %} + </form> + {% else %} + {% trans "You don't have permission for resizing instance" %} + <button class="btn btn-lg btn-success pull-right disabled">{% trans "Resize" %}</button> + {% endif %} + <div class="clearfix"></div> + </div> + </div> + </div> + </div> + <div role="tabpanel" class="tab-pane" id="snapshots"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-tabs" role="tablist"> + <li role="presentation" class="active"> + <a href="#takesnapshot" aria-controls="takesnapshot" role="tab" data-toggle="tab"> + {% trans "Take Snapshot" %} </a> </li> <li role="presentation"> - <a href="#graphics" id="chartgraphs" class="action-button" aria-controls="graphics" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-stats" aria-hidden="true"></span> - {% trans "Stats" %} - </a> - </li> - <li role="presentation"> - <a href="#undefine" class="action-button" aria-controls="undefine" role="tab" data-toggle="tab"> - <span id="action-block" class="glyphicon glyphicon-trash" aria-hidden="true"></span> - {% trans "Destroy" %} + <a href="#managesnapshot" aria-controls="managesnapshot" role="tab" data-toggle="tab"> + {% trans "Manage Snapshots" %} </a> </li> </ul> <!-- Tab panes --> <div class="tab-content"> - <div role="tabpanel" class="tab-pane active" id="power"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - {% ifequal status 1 %} - <li role="presentation" class="active"> - <a href="#poweroff" aria-controls="poweroff" role="tab" data-toggle="tab"> - {% trans "Power Off" %} - </a> - </li> - <li role="presentation"> - <a href="#powercycle" aria-controls="powercycle" role="tab" data-toggle="tab"> - {% trans "Power Cycle" %} - </a> - </li> - <li role="presentation"> - <a href="#powerforce" aria-controls="powerforce" role="tab" data-toggle="tab"> - {% trans "Force Off" %} - </a> - </li> - {% if request.user.is_superuser %} - <li role="presentation"> - <a href="#suspend" aria-controls="suspend" role="tab" data-toggle="tab"> - {% trans "Suspend" %} - </a> - </li> - {% endif %} - {% endifequal %} - {% ifequal status 3 %} - {% if request.user.is_superuser %} - <li role="presentation" class="active"> - <a href="#resume" aria-controls="resume" role="tab" data-toggle="tab"> - {% trans "Resume" %} - </a> - </li> - <li role="presentation"> - <a href="#powerforce" aria-controls="powerforce" role="tab" data-toggle="tab"> - {% trans "Force Off" %} - </a> - </li> - {% endif %} - {% endifequal %} - {% ifequal status 5 %} - <li role="presentation" class="active"> - <a href="#boot" aria-controls="boot" role="tab" data-toggle="tab"> - {% trans "Power On" %} - </a> - </li> - {% endifequal %} - </ul> - <!-- Tab panes --> - <div class="tab-content"> - {% ifequal status 1 %} - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="poweroff"> - <p>{% trans "This action sends an ACPI shutdown signal to the instance." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <input type="submit" name="poweroff" class="btn btn-lg btn-success pull-right" value="{% trans "Power Off" %}"> - <div class="clearfix"></div> - </form> + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="takesnapshot"> + {% ifequal status 5 %} + <p>{% trans "This may take more than an hour, depending on how much content is on your droplet and how large the disk is." %}</p> + <form class="form-inline" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-12"> + <input type="text" class="form-control input-lg" name="name" placeholder="{% trans "Enter Snapshot Name" %}" maxlength="14"> </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="powercycle"> - <p>{% trans "This action forcibly powers off and start the instance and may cause data corruption." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <input type="submit" name="powercycle" class="btn btn-lg btn-success pull-right" value="{% trans "Power Cycle" %}"> - <div class="clearfix"></div> - </form> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="powerforce"> - <p>{% trans "This action forcibly powers off the instance and may cause data corruption." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <input type="submit" name="powerforce" class="btn btn-lg btn-success pull-right" value="{% trans "Force Off" %}"> - <div class="clearfix"></div> - </form> - </div> - {% if request.user.is_superuser %} - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="suspend"> - <p>{% trans "This action suspends the instance." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <input type="submit" name="suspend" class="btn btn-lg btn-success pull-right" value="{% trans "Suspend" %}"> - <div class="clearfix"></div> - </form> - </div> - {% endif %} - {% endifequal %} - {% ifequal status 3 %} - {% if request.user.is_superuser %} - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resume"> - <p>{% trans "This action restore the instance after suspend." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <input type="submit" name="resume" class="btn btn-lg btn-success pull-right" value="{% trans "Resume" %}"> - <div class="clearfix"></div> - </form> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="powerforce"> - <p>{% trans "This action forcibly powers off the instance and may cause data corruption." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <input type="submit" name="powerforce" class="btn btn-lg btn-success pull-right" value="{% trans "Force Off" %}"> - <div class="clearfix"></div> - </form> - </div> - {% else %} - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resume"> - <p>{% trans "Administrator blocked your instance." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - <button class="btn btn-lg btn-success disabled pull-right">{% trans "Resume" %}</button> - <div class="clearfix"></div> - </form> - </div> - {% endif %} - {% endifequal %} - {% ifequal status 5 %} - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="boot"> - <p>{% trans "Click on Boot button to start this instance." %}</p> - <form action="" method="post" role="form">{% csrf_token %} - {% if instance.is_template %} - <p>{% trans "Template instance cannot be started." %}</p> - <input type="submit" name="poweron" class="btn btn-lg btn-success pull-right disabled" value="{% trans "Power On" %}"> - {% else %} - <input type="submit" name="poweron" class="btn btn-lg btn-success pull-right" value="{% trans "Power On" %}"> - {% endif %} - <div class="clearfix"></div> - </form> - </div> - {% endifequal %} - </div> - </div> - </div> - <div role="tabpanel" class="tab-pane" id="access"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="active"> - <a href="#vnconsole" aria-controls="vnconsole" role="tab" data-toggle="tab"> - {% trans "Console" %} - </a> - </li> - {% if show_access_root_password %} - <li role="presentation"> - <a href="#rootpasswd" aria-controls="rootpasswd" role="tab" data-toggle="tab"> - {% trans "Root Password" %} - </a> - </li> - {% endif %} - {% if show_access_ssh_keys %} - <li role="presentation"> - <a href="#sshkeys" aria-controls="sshkeys" role="tab" data-toggle="tab"> - {% trans "SSH Keys" %} - </a> - </li> - {% endif %} - {% ifequal status 1 %} - <li role="presentation"> - <a href="#vdiconsole" aria-controls="vdiconsole" role="tab" data-toggle="tab"> - {% trans "VDI" %} - </a> - </li> - {% endifequal %} - </ul> - <!-- Tab panes --> - <div class="tab-content"> - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="vnconsole"> - <p>{% trans "This action opens a new window with a VNC connection to the console of the instance." %}</p> - {% ifequal status 1 %} - <!-- Split button --> - <div class="btn-group pull-right"> - <button type="button" class="btn btn-lg btn-success " onclick="open_console('lite')">Console</button> - <button type="button" class="btn btn-lg btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span class="caret"></span> - <span class="sr-only">{% trans 'Toggle Dropdown' %}</span> - </button> - <ul class="dropdown-menu"> - <li><a href="#" title="Console port: {{ console_port }}" onclick="open_console('lite')">{% trans "Console - Lite" %}</a></li> - <li><a href="#" title="Console port: {{ console_port }}" onclick="open_console('full')">{% trans "Console - Full" %}</a></li> - </ul> - </div> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled">{% trans "Console" %}</button> - {% endifequal %} - <div class="clearfix"></div> </div> - {% if show_access_root_password %} - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="rootpasswd"> - <p>{% trans "You need shut down your instance and enter a new root password." %}</p> - <form class="form-inline" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-12"> - <input type="text" class="form-control input-lg" name="passwd" placeholder="{% trans "Enter Password" %}" maxlength="24"> + {% ifequal status 5 %} + <input type="submit" class="btn btn-lg btn-success pull-right" name="snapshot" value="{% trans "Take Snapshot" %}"> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled">{% trans "Take Snapshot" %}</button> + {% endifequal %} + </form> + <div class="clearfix"></div> + {% else %} + <p>{% trans "To take a snapshot please Power Off the instance." %}</p> + {% endifequal %} + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="managesnapshot"> + {% ifequal status 5 %} + {% if snapshots %} + <p>{% trans "Choose a snapshot for restore/delete" %}</p> + <div class="table-responsive"> + <table class="table"> + <thead> + <th>{% trans "Name" %}</th> + <th>{% trans "Date" %}</th> + <th colspan="2">{% trans "Action" %}</th> + </thead> + <tbody> + {% for snap in snapshots %} + <tr> + <td><strong>{{ snap.name }}</strong></td> + <td>{{ snap.date|date:"M d H:i:s" }}</td> + <td style="width:30px;"> + <form action="" method="post" style="height:10px" role="form">{% csrf_token %} + <input type="hidden" name="name" value="{{ snap.name }}"> + {% ifequal status 5 %} + <button type="submit" class="btn btn-sm btn-default" name="revert_snapshot" title="Revert to this Snapshot" onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-save"></span> + </button> + {% else %} + <button type="button" class="btn btn-sm btn-default disabled"> + <span class="glyphicon glyphicon-save"></span> + </button> + {% endifequal %} + </form> + </td> + <td style="width:30px;"> + <form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="name" value="{{ snap.name }}"> + <button type="submit" class="btn btn-sm btn-default" name="delete_snapshot" title="Delete Snapshot" onclick="return confirm('{% trans "Are you sure?" %}')"> + <span class="glyphicon glyphicon-trash"></span> + </button> + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% else %} + <p>{% trans "You do not have any snapshots" %}</p> + {% endif %} + {% else %} + <p>{% trans "To restore snapshots you need Power Off the instance." %}</p> + {% endifequal %} + </div> + </div> + </div> + </div> + <div role="tabpanel" class="tab-pane" id="settings"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-tabs" role="tablist"> + {% if request.user.is_superuser %} + <li role="presentation" class="active"> + <a href="#boot_opt" aria-controls="boot" role="tab" data-toggle="tab"> + {% trans "Boot" %} + </a> + </li> + <li role="presentation"> + <a href="#disks" aria-controls="disks" role="tab" data-toggle="tab"> + {% trans "Disk" %} + </a> + </li> + {% endif %} + {% if request.user.is_superuser or request.user.is_staff or userinstance.is_vnc %} + <li role="presentation"> + <a href="#vncsettings" aria-controls="vncsettings" role="tab" data-toggle="tab"> + {% trans "Console" %} + </a> + </li> + {% endif %} + {% if request.user.is_superuser %} + <li role="presentation"> + <a href="#network" aria-controls="network" role="tab" data-toggle="tab"> + {% trans "Network" %} + </a> + </li> + {% endif %} + {% if request.user.is_superuser or request.user.userattributes.can_clone_instances %} + <li role="presentation"> + <a href="#clone" aria-controls="clone" role="tab" data-toggle="tab"> + {% trans "Clone" %} + </a> + </li> + {% endif %} + {% if request.user.is_superuser %} + <li role="presentation"> + <a href="#migrate" aria-controls="migrate" role="tab" data-toggle="tab"> + {% trans "Migrate" %} + </a> + </li> + <li role="presentation"> + <a href="#xmledit" aria-controls="xmledit" role="tab" data-toggle="tab"> + {% trans "XML" %} + </a> + </li> + {% endif %} + {% if request.user.is_superuser or request.user.userattributes.can_clone_instances %} + <li role="presentation"> + <a href="#options" aria-controls="options" role="tab" data-toggle="tab"> + {% trans "Options" %} + </a> + </li> + {% endif %} + {% if request.user.is_superuser %} + <li role="presentation"> + <a href="#users" aria-controls="users" role="tab" data-toggle="tab"> + {% trans "Users" %} + </a> + </li> + {% endif %} + </ul> + <!-- Tab panes --> + <div class="tab-content"> + {% if request.user.is_superuser %} + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="boot_opt"> + <p style="font-weight:bold;">{% trans 'Autostart' %}</p> + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-12 col-sm-offset-2"> + <p>{% trans "Autostart your instance when host server is power on " %} + {% ifequal autostart 0 %} + <input type="submit" class="btn btn-success" name="set_autostart" value="{% trans "Enable" %}"> + {% else %} + <input type="submit" class="btn btn-danger" name="unset_autostart" value="{% trans "Disable" %}"> + {% endifequal %} + </p> + </div> + </div> + </form> + <p style="font-weight:bold;">{% trans 'Boot Order' %}</p> + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-12 col-sm-offset-2"> + {% ifequal status 5 %} + <p>{% trans "Enable Boot Menu for your instance when it starts up " %} + {% ifequal bootmenu 0 %} + <input type="submit" class="btn btn-success" name="set_bootmenu" title="Show boot menu" value="{% trans "Enable" %}"> + {% else %} + <input type="submit" class="btn btn-danger" name="unset_bootmenu" title="Hide boot menu" value="{% trans "Disable" %}"> + {% endifequal %} + {% else %} + {% ifequal bootmenu 0 %} + <p>{% trans "**** Please shutdown instance to modify boot menu ****" %}</p> + {% endifequal %} + {% endifequal %} + </div> + </div> + </form> + </p> + {% ifequal bootmenu 1 %} + <div class="col-sm-6 col-sm-offset-2"> + <div class="well"> + {% for idx, val in boot_order.items %} + <label>{{ idx|add:1 }}:{{ val.target }}, </label> + {% endfor %} + </div> + </div> + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <input id="bootorder" name="bootorder" hidden> + <div class="form-group"> + <div class="col-sm-6 col-sm-offset-2"> + <div id="b_order" class="multipleselect"> + {% for disk in disks %} + <label><input type="checkbox" name="disk:{{ disk.dev }}" value="disk:{{ disk.dev }}" onclick="set_orderlist($('#bootorder'))" />{{ disk.dev }} - {{ disk.image }}</label> + {% endfor %} + {% for cd in media %} + <label><input type="checkbox" name="cdrom:{{ cd.dev }}" value="cdrom:{{ cd.dev }}" onclick="set_orderlist($('#bootorder'))"/>{{ cd.dev }} - {{ cd.image }}</label> + {% endfor %} + {% for net in networks %} + <label><input type="checkbox" name="network:{{ net.mac }}" value="network:{{ net.mac }}" onclick="set_orderlist($('#bootorder'))"/>NIC - {{ net.mac|slice:"9:" }}</label> + {% endfor %} </div> </div> - {% ifequal status 5 %} - <input type="submit" class="btn btn-lg btn-success pull-right" name="rootpasswd" value="{% trans "Reset Root Password" %}"> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled">{% trans "Reset Root Password" %}</button> - {% endifequal %} - </form> - <div class="clearfix"></div> - </div> - {% endif %} - {% if show_access_ssh_keys %} - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="sshkeys"> - <p>{% trans "You need shut down your instance and choose your public key." %}</p> - <form class="form-inline" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-12"> - <select name="sshkeyid" class="form-control keyselect"> - {% if publickeys %} - {% for key in publickeys %} - <option value="{{ key.id }}">{{ key.keyname }}</option> + <div class="col-sm-3"> + <div class="row" style="margin-top: 2em;"> + <a href="#" id="boot_order_up" class="btn btn-default"><span class="glyphicon glyphicon-arrow-up" title="up: move selected devices"></span></a> + </div> + <div class="row" style="margin-top: 1em;"> + <a href="#" id="boot_order_down" class="btn btn-default"><span class="glyphicon glyphicon-arrow-down" title="down: move selected devices"></span></a> + </div> + </div> + </div> + <div class="col-sm-6 col-sm-offset-2"> + <input type="submit" class="btn btn-success btn-block" name="set_bootorder" value="{% trans "Apply" %}"> + </div> + </form> + {% endifequal %} + <div class="clearfix"></div> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="disks"> + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <p style="font-weight:bold;"> + {% trans "Instance Media" %} + {% if status == 5 %} + <button type="submit" name="add_cdrom" type="button" class="btn btn-success pull-right" title="Add CD-ROM"> + <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> + </button> + {% else %} + <button type="submit" type="button" class="btn btn-success disabled pull-right" title="Add CD-ROM" disabled> + <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> + </button> + {% endif %} + </p> + </form> + {% for cd in media %} + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <a class="col-sm-3 control-label" + name="details" + title="{% trans "Details" %}" + tabindex="0" + data-trigger="focus" + data-toggle="popover" + data-html="true" + data-content="<strong>{% trans 'Bus' %}:</strong> {{ cd.bus }} <br/> + <strong>{% trans 'Dev' %}:</strong> {{ cd.dev }}"> + {% trans "CDROM" %} {{ forloop.counter }} + </a> + {% if not cd.image %} + <div class="col-sm-6"> + <select name="media" class="form-control"> + {% if media_iso %} + {% for iso in media_iso %} + <option value="{{ iso }}">{{ iso }}</option> {% endfor %} {% else %} - <option value="None">{% trans "None" %}</option> + <option value="none">{% trans "None" %}</option> {% endif %} </select> </div> - </div> - {% ifequal status 5 %} - <input type="submit" class="btn btn-lg btn-success pull-right" name="addpublickey" value="{% trans "Add Public Key" %}"> + <div class="col-sm-2"> + {% if media_iso and allow_admin_or_not_template %} + <button type="submit" class="btn btn-sm btn-success pull-left" name="mount_iso" value="{{ cd.dev }}" style="margin-top: 2px;">{% trans "Mount" %}</button> + {% else %} + <button class="btn btn-sm btn-success pull-left disabled" style="margin-top: 2px;">{% trans "Mount" %}</button> + {% endif %} + {% if status == 5 and allow_admin_or_not_template %} + <button type="submit" class="btn btn-sm btn-danger pull-left" title="Detach CD-Rom (remove device)" name="detach_cdrom" value="{{ cd.dev }}" style="margin-top: 2px;"><i class="glyphicon glyphicon-remove-circle"></i></button> + {% endif %} + </div> {% else %} - <button class="btn btn-lg btn-success pull-right disabled">{% trans "Add Public Key" %}</button> - {% endifequal %} - </form> - <div class="clearfix"></div> - </div> - {% endif %} - {% ifequal status 1 %} - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="vdiconsole"> - <p>{% trans "This action opens a remote viewer with a connection to the console of the instance." %}</p> - <div class="input-group"> - <input type="text" class="input-lg disabled form-control" disabled id="vdi_url_input"/> - <span class="input-group-btn"> - <a href="#" class="btn btn-lg btn-success" id="vdi_url" >{% trans "VDI" %}</a> - </span> + <div class="col-sm-6"> + <input class="form-control" value="{{ cd.image }}" disabled/> + </div> + <div class="col-sm-2"> + <input type="hidden" name="path" value="{{ cd.path }}"> + {% if allow_admin_or_not_template %} + <button type="submit" class="btn btn-sm btn-success pull-left" value="{{ cd.dev }}" name="umount_iso" style="margin-top: 2px;">{% trans "Umount" %}</button> + {% else %} + <button class="btn btn-sm btn-success pull-left disabled" value="{{ cd.dev }}" name="umount_iso" style="margin-top: 2px;">{% trans "Umount" %}</button> + {% endif %} + </div> + {% endif %} </div> - <div class="clearfix"></div> + </form> + {% empty %} + <div class="col-sm-offset-3 col-sm-6"> + <div class="well well-sm">{% trans 'There is not any CD-ROM device.' %}</div> </div> + {% endfor %} + <div class="clearfix"></div> + <p style="font-weight:bold;"> + {% trans "Instance Volume" %} + {% include 'add_instance_volume.html' %} + </p> + + <div class="col-xs-12 col-sm-12"> + <table class="table table-hover"> + <thead> + <th>{% trans "Device" %}</th> + <th>{% trans "Used" %}</th> + <th>{% trans "Capacity" %}</th> + <th>{% trans "Storage" %}</th> + <th>{% trans "Source" %}</th> + <th style="width:100px;">{% trans "Action" %}</th> + </thead> + <tbody> + {% for disk in disks %} + <tr> + <td> + <button type="submit" class="btn btn-sm btn-default" + name="details" + title="{% trans "Details" %}" + tabindex="0" + data-trigger="focus" + data-toggle="popover" + data-html="true" + data-content="<strong>Bus:</strong> {{ disk.bus }} <br/> + <strong>Format:</strong> {{ disk.format }} <br/> + <strong>Cache:</strong> {{ disk.cache }}"> + <i class="fa fa-info"></i> + </button> + {{ disk.dev }} + <br> + {{ disk.target }} + </td> + <td>{{ disk.used | filesizeformat}}</td> + <td>{{ disk.size | filesizeformat }}</td> + <td>{{ disk.storage }}</td> + <td>{{ disk.path }}</td> + <td> + <form action="" method="post" style="height:10px" role="form">{% csrf_token %} + <input type="hidden" name="path" value="{{ disk.path }}"> + <input type="hidden" name="dev" value="{{ disk.dev }}"> + <input type="hidden" name="storage" value="{{ disk.storage }}"> + <input type="hidden" name="name" value="{{ disk.image }}"> + {% ifequal status 5 %} + <button type="submit" class="btn btn-sm btn-default" name="detach_vol" value="{{ disk.dev }}" title="{% trans "Detach" %}" onclick="return confirm('{% trans "Are you sure to detach volume?" %}')"> + <i class="fa fa-eject"></i> + </button> + <button type="submit" class="btn btn-sm btn-default" name="delete_vol" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure to delete volume?" %}')"> + <i class="fa fa-trash"></i> + </button> + {% else %} + <button class="btn btn-sm btn-default disabled" name="detach_vol" value="{{ disk.dev }}" title="{% trans "Detach" %}" onclick="return confirm('{% trans "Are you sure to detach volume after shutdown?" %}')"> + <i class="fa fa-eject"></i> + </button> + <button class="btn btn-sm btn-default disabled" name="delete_vol" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure to delete after shutdown?" %}')"> + <i class="fa fa-trash"></i> + </button> + {% endifequal %} + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + <div class="clearfix"></div> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="network"> + <p> + {% trans "Add a network device" %} + {% include 'add_instance_network_block.html' %} + </p> + + <div class="col-xs-12 col-sm-12"> + <form method="post" role="form">{% csrf_token %} + {% for network in networks %} + {% if forloop.first %} + <p><strong>{% trans "Network Devices" %}</strong></p> + {% endif %} + <div class="panel panel-default"> + <div class="panel-heading"> + <label>eth{{ forloop.counter0 }}({{ network.target|default:"no target" }})</label> + <button class="btn btn-sm pull-right btn-danger" value="{{ network.mac }}" name="delete_network" title="{% trans "Delete Device" %}" onclick="return confirm('{% trans "Are you sure?" %}')">{% trans "Delete" %}</button> + </div> + <div class="panel-body"> + <div class="form-group form-inline"> + <label class="col-sm-2 col-sm-offset-1 control-label">{% trans "MAC" %} </label> + <input class="form-control" type="text" value="{{ network.mac }}" readonly/> + <label class="control-label"><em>to</em></label> + <input class="form-control" type="text" name="net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/> + </div> + <div class="form-group form-inline"> + <label class="col-sm-2 col-sm-offset-1 control-label">{% trans "NIC" %} </label> + <input class="form-control" type="text" value="{{ network.nic }}" readonly/> + <label class="control-label"><em>to</em></label> + <select class="form-control" name="net-source-{{ forloop.counter0 }}"> + {% for c_net in compute_networks %} + <option value="net:{{ c_net }}" {% ifequal c_net network.nic %} selected {% endifequal %}>{% trans 'Network' %} {{ c_net }}</option> + {% endfor %} + {% for c_iface in compute_interfaces %} + <option value="iface:{{ c_iface }}" {% ifequal c_iface network.nic %} selected {% endifequal %}>{% trans 'Interface' %} {{ c_iface }}</option> + {% endfor %} + </select> + </div> + <div class="form-group form-inline"> + <label class="col-sm-2 col-sm-offset-1">{% trans "Filter" %} </label> + <input class="form-control" type="text" value="{{ network.filterref }}" readonly/> + <label class="control-label"><em>to</em></label> + <select class="form-control" name="net-nwfilter-{{ forloop.counter0 }}"> + <option value="">{% trans "None" %}</option> + {% for c_filters in compute_nwfilters %} + <option value="{{ c_filters }}" {% ifequal c_filters network.filterref %} selected {% endifequal %}>{{ c_filters }}</option> + {% endfor %} + </select> + </div> + <button class="btn btn-sm btn-primary btn-block" name="change_network" title="{% trans "Apply Network Changes" %}">{% trans "Apply" %}</button> + </div> + </div> + {% endfor %} + </form> + </div> + <div class="clearfix"></div> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="migrate"> + <p>{% trans "For migration both host servers must have equal settings and OS type" %}</p> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Original host" %}</label> + <div class="col-sm-6"> + <p style="margin: 10px -10px 0 0;">{{ compute.name }}</p> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Host migration" %}</label> + <div class="col-sm-6"> + <select name="compute_id" class="form-control"> + {% if computes_count != 1 %} + {% for comp in computes %} + {% if comp.id != compute.id %} + <option value="{{ comp.id }}">{{ comp.name }}</option> + {% endif %} + {% endfor %} + {% endif %} + </select> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Live migration" %}</label> + <div class="col-sm-6"> + <input type="checkbox" name="live_migrate" value="true" id="vm_live_migrate" {% ifequal status 1 %}checked{% endifequal %}> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Unsafe migration" %}</label> + <div class="col-sm-6"> + <input type="checkbox" name="unsafe_migrate" value="true" id="vm_unsafe_migrate"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Delete original" %}</label> + <div class="col-sm-6"> + <input type="checkbox" name="xml_delete" value="true" id="xml_delete" checked> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Offline migration" %}</label> + <div class="col-sm-6"> + <input type="checkbox" name="offline_migrate" value="true" id="offline_migrate" {% ifequal status 5 %}checked{% endifequal %}> + </div> + </div> + {% if computes_count != 1 %} + <button type="submit" class="btn btn-lg btn-success pull-right" name="migrate" onclick="showPleaseWaitDialog();">{% trans "Migrate" %}</button> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled">{% trans "Migrate" %}</button> + {% endif %} + </form> + <div class="clearfix"></div></p> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="xmledit"> + <p>{% trans "If you need to edit xml please Power Off the instance" %}</p> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="col-sm-12" id="xmlheight"> + <textarea id="editor">{{ inst_xml }}</textarea> + </div> + {% ifequal status 5 %} + <input type="hidden" name="inst_xml"> + <button type="submit" class="btn btn-lg btn-success pull-right" name="change_xml"> + {% trans "Change" %} + </button> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled"> + {% trans "Change" %} + </button> + {% endifequal %} + </form> + <div class="clearfix"></div> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="users"> + <div> + <p style="font-weight:bold;"> + {% trans "Instance owners" %} + {% include 'add_instance_owner_block.html' %} + </p> + </div> + <div class="table-responsive"> + <table class="table table-striped sortable-theme-bootstrap" data-sortable> + <tbody class="searchable"> + {% for userinstance in userinstances %} + <tr> + <td><a href="{% url 'account' userinstance.user.id %}">{{ userinstance.user }}</a></td> + <td style="width:30px;"> + <form action="" method="post" style="height:10px" role="form">{% csrf_token %} + <input type="hidden" name="userinstance" value="{{ userinstance.pk }}"> + <button type="submit" class="btn btn-sm btn-default" name="del_owner" title="{% trans "Delete" %}"> + <i class="fa fa-trash"></i> + </button> + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + <div class="clearfix"></div> + </div> + {% endif %} + {% if request.user.is_superuser or request.user.is_staff or userinstance.is_vnc %} + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="vncsettings"> + <p>{% trans "To set console's type, shutdown the instance." %}</p> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="form-group" id="console_type_selection"> + <label for="console_select_type" class="col-sm-2 control-label">{% trans "Type" %}</label> + <div class="col-sm-6"> + <select id="console_select_type" class="form-control" name="console_type"> + <option value="" style="font-weight: bold">{% trans "please choose" %}</option> + {% for ctype in console_types %} + <option value="{{ ctype }}">{{ ctype }}</option> + {% endfor %} + </select> + </div> + <div class="col-sm-3"> + {% ifequal status 5 %} + <button type="submit" class="btn btn-success " name="set_console_type">{% trans "Set" %}</button> + {% else %} + <button class="btn btn-success disabled" name="set_console_type">{% trans "Set" %}</button> + {% endifequal %} + </div> + </div> + </form> + <p>{% trans "To set console listen address, shutdown the instance." %}</p> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="form-group" id="console_listen_address_selection"> + <label for="console_select_listen_address" class="col-sm-2 control-label">{% trans "Listen on" %}</label> + <div class="col-sm-6"> + <select id="console_select_listen_address" class="form-control" name="console_listen_address"> + <option value="" style="font-weight: bold">{% trans "please choose" %}</option> + {% for address, label in console_listen_addresses %} + <option value="{{ address }}">{{ label }}</option> + {% endfor %} + </select> + </div> + <div class="col-sm-3"> + {% ifequal status 5 %} + <button type="submit" class="btn btn-success " name="set_console_listen_address">{% trans "Set" %}</button> + {% else %} + <button class="btn btn-success disabled" name="set_console_listen_address">{% trans "Set" %}</button> + {% endifequal %} + </div> + </div> + </form> + <p>{% trans "To create console password, shutdown the instance." %}</p> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-offset-2 col-sm-10"> + <div class="checkbox"> + <label> + <input type="checkbox" name="auto_pass" value="true" id="console_passwd_gen">{% trans "Generate" %} + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" name="clear_pass" value="true" id="console_passwd_clear">{% trans "Clear" %} + </label> + </div> + </div> + </div> + <div class="form-group"> + <label for="inputPassword1" class="col-sm-2 control-label">{% trans "Password" %}</label> + <div class="col-sm-6" id="console_passwd_manual"> + <input id="console_show_pass" type="password" class="form-control" name="console_passwd" + {% if console_passwd %} + value="{{ console_passwd }}" + {% else %} + placeholder="{% trans "Password" %}" + {% endif %} maxlength="14"> + </div> + <div class="col-sm-3"> + {% if console_passwd %} + <a href="#" name="console_show" class="btn btn-primary btn-md" onclick="show_console()">{% trans "Show" %}</a> + {% endif %} + {% ifequal status 5 %} + <button type="submit" class="btn btn-success" name="set_console_passwd">{% trans "Set" %}</button> + {% else %} + <button class="btn btn-success disabled" name="set_console_passwd">{% trans "Set" %}</button> + {% endifequal %} + </div> + </div> + </form> + <p>{% trans "To set console's keymap, shutdown the instance." %}</p> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <div class="col-sm-offset-2 col-sm-10"> + <div class="checkbox"> + <label> + <input type="checkbox" name="clear_keymap" value="true" id="console_keymap_clear">{% trans "Clear" %} + </label> + </div> + </div> + </div> + <div class="form-group" id="console_keymap_selection"> + <label for="console_select_keymap" class="col-sm-2 control-label">{% trans "Keymap" %}</label> + <div class="col-sm-6"> + <select id="console_select_keymap" class="form-control" name="console_keymap"> + <option value="" style="font-weight: bold">{% trans "please choose" %}</option> + {% for keymap in keymaps %} + <option value="{{ keymap }}">{{ keymap }}</option> + {% endfor %} + </select> + </div> + <div class="col-sm-3"> + {% ifequal status 5 %} + <button type="submit" class="btn btn-success" name="set_console_keymap">{% trans "Set" %}</button> + {% else %} + <button class="btn btn-success disabled" name="set_console_keymap">{% trans "Set" %}</button> + {% endifequal %} + </div> + </div> + </form> + <div class="clearfix"></div> + </div> + {% endif %} + {% if request.user.is_superuser or request.user.userattributes.can_clone_instances %} + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="clone"> + <p style="font-weight:bold;">{% trans "Create a clone" %}</p> + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <label class="col-sm-3 control-label" style="font-weight:normal;">{% trans "Clone Name" %}</label> + {% if request.user.is_superuser %} + <div class="col-sm-4"> + <input id="clone_name" type="text" class="form-control" name="name" value="{{ vname }}-clone"/> + </div> + <div class="col-sm-4"> + <button type="button" class="btn btn-sm btn-success pull-left" name="guess-clone-name" + onclick="guess_clone_name()" style="margin-top: 2px;">{% trans "Guess" %}</button> + </div> + {% elif clone_instance_auto_name %} + <div class="col-sm-4"> + <input id="clone_instance_auto_name" type="text" class="form-control" name="auto_name" value="Automatic" disabled/> + </div> + {% else %} + <div class="col-sm-4"> + <select id="select_clone_name" class="form-control" name="name" size="1"/> + {% for name in clone_free_names %} + <option value="{{ name }}">{{ name }}</option> + {% endfor %} + </select> + </div> + {% endif %} + </div> + {% if request.user.is_superuser %} + <p style="font-weight:bold;">{% trans "Network devices" %}</p> + {% for network in networks %} + <div class="form-group"> + <label class="col-sm-3 control-label" style="font-weight:normal;">eth{{ forloop.counter0 }} ({{ network.nic }})</label> + <div class="col-sm-4"> + <input type="text" class="form-control" name="clone-net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/> + </div> + <div class="col-sm-4"> + <button type="button" class="btn btn-sm btn-success pull-left" name="random-mac-{{ forloop.counter0 }}" + onclick="random_mac('clone-net-mac-{{ forloop.counter0 }}')" style="margin-top: 2px;">{% trans "Random" %}</button> + <button type="button" class="btn btn-sm btn-success pull-left" name="guess-mac-{{ forloop.counter0 }}" + onclick="guess_mac_address('#clone_name', {{ forloop.counter0 }})" style="margin-top: 2px;">{% trans "Guess" %}</button> + </div> + </div> + {% endfor %} + {% else %} + {% for network in networks %} + <input type="hidden" class="form-control" name="clone-net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/> + {% endfor %} + {% endif %} + {% if request.user.is_superuser %} + <p style="font-weight:bold;">{% trans "Storage devices" %}</p> + {% for disk in disks %} + <div class="form-group"> + <label class="col-sm-3 control-label" style="font-weight:normal;">{{ disk.dev }} ({{ disk.storage }})</label> + <div class="col-sm-4"> + <input id="disk_name-{{ disk.dev }}" type="text" class="form-control" name="disk-{{ disk.dev }}" value="{{ disk.image }}"/> + </div> + {% ifequal disk.format 'qcow2' %} + <label class="col-sm-2 control-label" style="font-weight:normal;margin-left:-35px;">{% trans 'Metadata' %}</label> + <div class="col-sm-1"> + <input type="checkbox" name="meta-{{ disk.dev }}" value="true" style="margin-top: 10px;"> + </div> {% endifequal %} </div> + {% endfor %} + {% else %} + {% for disk in disks %} + <input id="disk_name-{{ disk.dev }}" type="hidden" class="form-control" name="disk-{{ disk.dev }}" value="{{ disk.image }}"/> + {% endfor %} + {% endif %} + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Title" %}</label> + <div class="col-sm-6"> + <input type="text" name="clone-title" class="form-control"> </div> </div> - <div role="tabpanel" class="tab-pane" id="resize"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="active"> - <a href="#resizevm" aria-controls="resizevm" role="tab" data-toggle="tab"> - {% trans "Resize Instance" %} - </a> - </li> - </ul> - <!-- Tab panes --> - <div class="tab-content"> - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resizevm"> - {% if request.user.is_superuser or request.user.is_staff or userinstance.is_change %} - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <p style="font-weight:bold;">{% trans "Logical host CPUs" %} : {{ vcpu_host }}</p> - <div class="form-group"> - <label class="col-sm-4 control-label" style="font-weight:normal;"> {% trans "Current allocation" %}</label> - <div class="col-sm-4"> - <select name="cur_vcpu" class="form-control"> - {% for cpu in vcpu_range %} - {% if cur_vcpu %} - <option value="{{ cpu }}" {% if cpu == cur_vcpu %}selected{% endif %}>{{ cpu }}</option> - {% else %} - <option value="{{ cpu }}" {% if cpu == vcpu %}selected{% endif %}>{{ cpu }}</option> - {% endif %} - {% endfor %} - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Maximum allocation" %}</label> - <div class="col-sm-4"> - <select name="vcpu" class="form-control"> - {% for cpu in vcpu_range %} - <option value="{{ cpu }}" {% if cpu == vcpu %}selected{% endif %}>{{ cpu }}</option> - {% endfor %} - </select> - </div> - </div> - <p style="font-weight:bold;">{% trans "Total host memory:" %} {{ memory_host|filesizeformat }}</p> - <div class="form-group"> - <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Current allocation" %} ({% trans "MB" %})</label> - <div class="col-sm-4 js-custom__container"> - <select name="cur_memory" class="form-control js-custom__toggle"> - {% for mem in memory_range %} - <option value="{{ mem }}" {% if mem == cur_memory %}selected{% endif %}>{{ mem }}</option> - {% endfor %} - </select> - <input type="text" name="cur_memory_custom" class="form-control js-custom__toggle" style="display: none" /> - <small><input type="checkbox" class="js-custom__checkbox" /> {% trans "Custom value" %}</small> - </div> - </div> - <div class="form-group"> - <label class="col-sm-4 control-label" - style="font-weight:normal;">{% trans "Maximum allocation" %} ({% trans "MB" %})</label> - <div class="col-sm-4 js-custom__container"> - <select name="memory" class="form-control js-custom__toggle"> - {% for mem in memory_range %} - <option value="{{ mem }}" - {% if mem == memory %}selected{% endif %}>{{ mem }}</option> - {% endfor %} - </select> - <input type="text" name="memory_custom" class="form-control js-custom__toggle" style="display: none" /> - <small><input type="checkbox" class="js-custom__checkbox" /> {% trans "Custom value" %}</small> - </div> - </div> - <p style="font-weight:bold;">{% trans "Disk allocation (B):" %}</p> - {% for disk in disks %} - <div class="form-group"> - <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Current allocation" %} ({{ disk.dev }})</label> - <div class="col-sm-4 js-custom__container"> - <input type="text" name="disk_size_{{ disk.dev }}" class="form-control" value="{{ disk.size|filesizeformat }}" /> - </div> - </div> - {% endfor %} - {% ifequal status 5 %} - <button type="submit" class="btn btn-lg btn-success pull-right" name="resize">{% trans "Resize" %}</button> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled" name="resize">{% trans "Resize" %}</button> - {% endifequal %} - </form> - {% else %} - {% trans "You don't have permission for resizing instance" %} - <button class="btn btn-lg btn-success pull-right disabled">{% trans "Resize" %}</button> - {% endif %} - <div class="clearfix"></div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Description" %}</label> + <div class="col-sm-6"> + <textarea name="clone-description" class="form-control"></textarea> + </div> + </div> + {% ifequal status 5 %} + <button type="submit" class="btn btn-lg btn-success pull-right" name="clone" onclick="showPleaseWaitDialog();">{% trans "Clone" %}</button> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled" name="clone">{% trans "Clone" %}</button> + {% endifequal %} + </form> + <div class="clearfix"></div> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="options"> + <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Title" %}</label> + <div class="col-sm-6"> + <input type="text" name="title" class="form-control" value="{{ title }}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Description" %}</label> + <div class="col-sm-6"> + <textarea name="description" class="form-control">{{ description }}</textarea> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Is template" %}</label> + <div class="col-sm-6"> + <input type="checkbox" name="is_template" value="True" id="is_template" {% if instance.is_template %}checked{% endif %} {% if not request.user.is_superuser %}disabled{% endif %}> + </div> + </div> + {% ifequal status 5 %} + <button type="submit" class="btn btn-lg btn-success pull-right" name="change_options">{% trans "Change" %}</button> + {% else %} + <button class="btn btn-lg btn-success pull-right disabled" name="change_options">{% trans "Change" %}</button> + {% endifequal %} + </form> + <div class="clearfix"></div> + </div> + {% endif %} + </div> + </div> + </div> + <div role="tabpanel" class="tab-pane" id="graphics"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-tabs" role="tablist"> + <li role="presentation" class="active"> + <a href="#graphs" aria-controls="graphs" role="tab" data-toggle="tab"> + {% trans "Real Time" %} + </a> + </li> + <li role="presentation"> + <a href="#logs" aria-controls="logs" role="tab" data-toggle="tab" onclick='update_logs_table("{{ vname }}");'> + {% trans "Logs" %} + </a> + </li> + </ul> + <!-- Tab panes --> + <div class="tab-content"> + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="graphs"> + <div class="panel panel-success"> + <div class="panel-heading"> + <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "CPU Usage" %}</h3> + </div> + <div class="panel-body"> + <div class="flot-chart"> + <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> + <canvas id="cpuChart" width="735" height="160"></canvas> + </div> </div> </div> </div> - </div> - <div role="tabpanel" class="tab-pane" id="snapshots"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="active"> - <a href="#takesnapshot" aria-controls="takesnapshot" role="tab" data-toggle="tab"> - {% trans "Take Snapshot" %} - </a> - </li> - <li role="presentation"> - <a href="#managesnapshot" aria-controls="managesnapshot" role="tab" data-toggle="tab"> - {% trans "Manage Snapshots" %} - </a> - </li> - </ul> - <!-- Tab panes --> - <div class="tab-content"> - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="takesnapshot"> - {% ifequal status 5 %} - <p>{% trans "This may take more than an hour, depending on how much content is on your droplet and how large the disk is." %}</p> - <form class="form-inline" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-12"> - <input type="text" class="form-control input-lg" name="name" placeholder="{% trans "Enter Snapshot Name" %}" maxlength="14"> - </div> - </div> - {% ifequal status 5 %} - <input type="submit" class="btn btn-lg btn-success pull-right" name="snapshot" value="{% trans "Take Snapshot" %}"> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled">{% trans "Take Snapshot" %}</button> - {% endifequal %} - </form> - <div class="clearfix"></div> - {% else %} - <p>{% trans "To take a snapshot please Power Off the instance." %}</p> - {% endifequal %} - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="managesnapshot"> - {% ifequal status 5 %} - {% if snapshots %} - <p>{% trans "Choose a snapshot for restore/delete" %}</p> - <div class="table-responsive"> - <table class="table"> - <thead> - <th>{% trans "Name" %}</th> - <th>{% trans "Date" %}</th> - <th colspan="2">{% trans "Action" %}</th> - </thead> - <tbody> - {% for snap in snapshots %} - <tr> - <td><strong>{{ snap.name }}</strong></td> - <td>{{ snap.date|date:"M d H:i:s" }}</td> - <td style="width:30px;"> - <form action="" method="post" style="height:10px" role="form">{% csrf_token %} - <input type="hidden" name="name" value="{{ snap.name }}"> - {% ifequal status 5 %} - <button type="submit" class="btn btn-sm btn-default" name="revert_snapshot" title="Revert to this Snapshot" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-save"></span> - </button> - {% else %} - <button type="button" class="btn btn-sm btn-default disabled"> - <span class="glyphicon glyphicon-save"></span> - </button> - {% endifequal %} - </form> - </td> - <td style="width:30px;"> - <form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="name" value="{{ snap.name }}"> - <button type="submit" class="btn btn-sm btn-default" name="delete_snapshot" title="Delete Snapshot" onclick="return confirm('{% trans "Are you sure?" %}')"> - <span class="glyphicon glyphicon-trash"></span> - </button> - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% else %} - <p>{% trans "You do not have any snapshots" %}</p> - {% endif %} - {% else %} - <p>{% trans "To restore snapshots you need Power Off the instance." %}</p> - {% endifequal %} + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "Memory Usage" %}</h3> + </div> + <div class="panel-body"> + <div class="flot-chart"> + <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> + <canvas id="memChart" width="735" height="160"></canvas> + </div> </div> </div> </div> - </div> - <div role="tabpanel" class="tab-pane" id="settings"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - {% if request.user.is_superuser %} - <li role="presentation" class="active"> - <a href="#boot_opt" aria-controls="boot" role="tab" data-toggle="tab"> - {% trans "Boot" %} - </a> - </li> - <li role="presentation"> - <a href="#disks" aria-controls="disks" role="tab" data-toggle="tab"> - {% trans "Disk" %} - </a> - </li> - {% endif %} - {% if request.user.is_superuser or request.user.is_staff or userinstance.is_vnc %} - <li role="presentation"> - <a href="#vncsettings" aria-controls="vncsettings" role="tab" data-toggle="tab"> - {% trans "Console" %} - </a> - </li> - {% endif %} - {% if request.user.is_superuser %} - <li role="presentation"> - <a href="#network" aria-controls="network" role="tab" data-toggle="tab"> - {% trans "Network" %} - </a> - </li> - {% endif %} - {% if request.user.is_superuser or request.user.userattributes.can_clone_instances %} - <li role="presentation"> - <a href="#clone" aria-controls="clone" role="tab" data-toggle="tab"> - {% trans "Clone" %} - </a> - </li> - {% endif %} - {% if request.user.is_superuser %} - <li role="presentation"> - <a href="#migrate" aria-controls="migrate" role="tab" data-toggle="tab"> - {% trans "Migrate" %} - </a> - </li> - <li role="presentation"> - <a href="#xmledit" aria-controls="xmledit" role="tab" data-toggle="tab"> - {% trans "XML" %} - </a> - </li> - {% endif %} - {% if request.user.is_superuser or request.user.userattributes.can_clone_instances %} - <li role="presentation"> - <a href="#options" aria-controls="options" role="tab" data-toggle="tab"> - {% trans "Options" %} - </a> - </li> - {% endif %} - {% if request.user.is_superuser %} - <li role="presentation"> - <a href="#users" aria-controls="users" role="tab" data-toggle="tab"> - {% trans "Users" %} - </a> - </li> - {% endif %} - </ul> - <!-- Tab panes --> - <div class="tab-content"> - {% if request.user.is_superuser %} - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="boot_opt"> - <p style="font-weight:bold;">{% trans 'Autostart' %}</p> - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-12 col-sm-offset-2"> - <p>{% trans "Autostart your instance when host server is power on " %} - {% ifequal autostart 0 %} - <input type="submit" class="btn btn-success" name="set_autostart" value="{% trans "Enable" %}"> - {% else %} - <input type="submit" class="btn btn-danger" name="unset_autostart" value="{% trans "Disable" %}"> - {% endifequal %} - </p> - </div> - </div> - </form> - <p style="font-weight:bold;">{% trans 'Boot Order' %}</p> - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-12 col-sm-offset-2"> - {% ifequal status 5 %} - <p>{% trans "Enable Boot Menu for your instance when it starts up " %} - {% ifequal bootmenu 0 %} - <input type="submit" class="btn btn-success" name="set_bootmenu" title="Show boot menu" value="{% trans "Enable" %}"> - {% else %} - <input type="submit" class="btn btn-danger" name="unset_bootmenu" title="Hide boot menu" value="{% trans "Disable" %}"> - {% endifequal %} - {% else %} - {% ifequal bootmenu 0 %} - <p>{% trans "**** Please shutdown instance to modify boot menu ****" %}</p> - {% endifequal %} - {% endifequal %} - </div> - </div> - </form> - </p> - {% ifequal bootmenu 1 %} - <div class="col-sm-6 col-sm-offset-2"> - <div class="well"> - {% for idx, val in boot_order.items %} - <label>{{ idx|add:1 }}:{{ val.target }}, </label> - {% endfor %} - </div> - </div> - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <input id="bootorder" name="bootorder" hidden> - <div class="form-group"> - <div class="col-sm-6 col-sm-offset-2"> - <div id="b_order" class="multipleselect"> - {% for disk in disks %} - <label><input type="checkbox" name="disk:{{ disk.dev }}" value="disk:{{ disk.dev }}" onclick="set_orderlist($('#bootorder'))" />{{ disk.dev }} - {{ disk.image }}</label> - {% endfor %} - {% for cd in media %} - <label><input type="checkbox" name="cdrom:{{ cd.dev }}" value="cdrom:{{ cd.dev }}" onclick="set_orderlist($('#bootorder'))"/>{{ cd.dev }} - {{ cd.image }}</label> - {% endfor %} - {% for net in networks %} - <label><input type="checkbox" name="network:{{ net.mac }}" value="network:{{ net.mac }}" onclick="set_orderlist($('#bootorder'))"/>NIC - {{ net.mac|slice:"9:" }}</label> - {% endfor %} - </div> - </div> - <div class="col-sm-3"> - <div class="row" style="margin-top: 2em;"> - <a href="#" id="boot_order_up" class="btn btn-default"><span class="glyphicon glyphicon-arrow-up" title="up: move selected devices"></span></a> - </div> - <div class="row" style="margin-top: 1em;"> - <a href="#" id="boot_order_down" class="btn btn-default"><span class="glyphicon glyphicon-arrow-down" title="down: move selected devices"></span></a> - </div> - </div> - </div> - <div class="col-sm-6 col-sm-offset-2"> - <input type="submit" class="btn btn-success btn-block" name="set_bootorder" value="{% trans "Apply" %}"> - </div> - </form> - {% endifequal %} - <div class="clearfix"></div> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="disks"> - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <p style="font-weight:bold;"> - {% trans "Instance Media" %} - {% if status == 5 %} - <button type="submit" name="add_cdrom" type="button" class="btn btn-success pull-right" title="Add CD-ROM"> - <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> - </button> - {% else %} - <button type="submit" type="button" class="btn btn-success disabled pull-right" title="Add CD-ROM" disabled> - <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> - </button> - {% endif %} - </p> - </form> - {% for cd in media %} - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <a class="col-sm-3 control-label" - name="details" - title="{% trans "Details" %}" - tabindex="0" - data-trigger="focus" - data-toggle="popover" - data-html="true" - data-content="<strong>{% trans 'Bus' %}:</strong> {{ cd.bus }} <br/> - <strong>{% trans 'Dev' %}:</strong> {{ cd.dev }}"> - {% trans "CDROM" %} {{ forloop.counter }} - </a> - {% if not cd.image %} - <div class="col-sm-6"> - <select name="media" class="form-control"> - {% if media_iso %} - {% for iso in media_iso %} - <option value="{{ iso }}">{{ iso }}</option> - {% endfor %} - {% else %} - <option value="none">{% trans "None" %}</option> - {% endif %} - </select> - </div> - <div class="col-sm-2"> - {% if media_iso and allow_admin_or_not_template %} - <button type="submit" class="btn btn-sm btn-success pull-left" name="mount_iso" value="{{ cd.dev }}" style="margin-top: 2px;">{% trans "Mount" %}</button> - {% else %} - <button class="btn btn-sm btn-success pull-left disabled" style="margin-top: 2px;">{% trans "Mount" %}</button> - {% endif %} - {% if status == 5 and allow_admin_or_not_template %} - <button type="submit" class="btn btn-sm btn-danger pull-left" title="Detach CD-Rom (remove device)" name="detach_cdrom" value="{{ cd.dev }}" style="margin-top: 2px;"><i class="glyphicon glyphicon-remove-circle"></i></button> - {% endif %} - </div> - {% else %} - <div class="col-sm-6"> - <input class="form-control" value="{{ cd.image }}" disabled/> - </div> - <div class="col-sm-2"> - <input type="hidden" name="path" value="{{ cd.path }}"> - {% if allow_admin_or_not_template %} - <button type="submit" class="btn btn-sm btn-success pull-left" value="{{ cd.dev }}" name="umount_iso" style="margin-top: 2px;">{% trans "Umount" %}</button> - {% else %} - <button class="btn btn-sm btn-success pull-left disabled" value="{{ cd.dev }}" name="umount_iso" style="margin-top: 2px;">{% trans "Umount" %}</button> - {% endif %} - </div> - {% endif %} - </div> - </form> - {% empty %} - <div class="col-sm-offset-3 col-sm-6"> - <div class="well well-sm">{% trans 'There is not any CD-ROM device.' %}</div> - </div> - {% endfor %} - <div class="clearfix"></div> - <p style="font-weight:bold;"> - {% trans "Instance Volume" %} - {% include 'add_instance_volume.html' %} - </p> - - <div class="col-xs-12 col-sm-12"> - <table class="table table-hover"> - <thead> - <th>{% trans "Device" %}</th> - <th>{% trans "Used" %}</th> - <th>{% trans "Capacity" %}</th> - <th>{% trans "Storage" %}</th> - <th>{% trans "Source" %}</th> - <th style="width:100px;">{% trans "Action" %}</th> - </thead> - <tbody> - {% for disk in disks %} - <tr> - <td> - <button type="submit" class="btn btn-sm btn-default" - name="details" - title="{% trans "Details" %}" - tabindex="0" - data-trigger="focus" - data-toggle="popover" - data-html="true" - data-content="<strong>Bus:</strong> {{ disk.bus }} <br/> - <strong>Format:</strong> {{ disk.format }} <br/> - <strong>Cache:</strong> {{ disk.cache }}"> - <i class="fa fa-info"></i> - </button> - {{ disk.dev }} - <br> - {{ disk.target }} - </td> - <td>{{ disk.used | filesizeformat}}</td> - <td>{{ disk.size | filesizeformat }}</td> - <td>{{ disk.storage }}</td> - <td>{{ disk.path }}</td> - <td> - <form action="" method="post" style="height:10px" role="form">{% csrf_token %} - <input type="hidden" name="path" value="{{ disk.path }}"> - <input type="hidden" name="dev" value="{{ disk.dev }}"> - <input type="hidden" name="storage" value="{{ disk.storage }}"> - <input type="hidden" name="name" value="{{ disk.image }}"> - {% ifequal status 5 %} - <button type="submit" class="btn btn-sm btn-default" name="detach_vol" value="{{ disk.dev }}" title="{% trans "Detach" %}" onclick="return confirm('{% trans "Are you sure to detach volume?" %}')"> - <i class="fa fa-eject"></i> - </button> - <button type="submit" class="btn btn-sm btn-default" name="delete_vol" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure to delete volume?" %}')"> - <i class="fa fa-trash"></i> - </button> - {% else %} - <button class="btn btn-sm btn-default disabled" name="detach_vol" value="{{ disk.dev }}" title="{% trans "Detach" %}" onclick="return confirm('{% trans "Are you sure to detach volume after shutdown?" %}')"> - <i class="fa fa-eject"></i> - </button> - <button class="btn btn-sm btn-default disabled" name="delete_vol" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure to delete after shutdown?" %}')"> - <i class="fa fa-trash"></i> - </button> - {% endifequal %} - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - <div class="clearfix"></div> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="network"> - <p> - {% trans "Add a network device" %} - {% include 'add_instance_network_block.html' %} - </p> - - <div class="col-xs-12 col-sm-12"> - <form method="post" role="form">{% csrf_token %} - {% for network in networks %} - {% if forloop.first %} - <p><strong>{% trans "Network Devices" %}</strong></p> - {% endif %} - <div class="panel panel-default"> - <div class="panel-heading"> - <label>eth{{ forloop.counter0 }}({{ network.target|default:"no target" }})</label> - <button class="btn btn-sm pull-right btn-danger" value="{{ network.mac }}" name="delete_network" title="{% trans "Delete Device" %}" onclick="return confirm('{% trans "Are you sure?" %}')">{% trans "Delete" %}</button> - </div> - <div class="panel-body"> - <div class="form-group form-inline"> - <label class="col-sm-2 col-sm-offset-1 control-label">{% trans "MAC" %} </label> - <input class="form-control" type="text" value="{{ network.mac }}" readonly/> - <label class="control-label"><em>to</em></label> - <input class="form-control" type="text" name="net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/> - </div> - <div class="form-group form-inline"> - <label class="col-sm-2 col-sm-offset-1 control-label">{% trans "NIC" %} </label> - <input class="form-control" type="text" value="{{ network.nic }}" readonly/> - <label class="control-label"><em>to</em></label> - <select class="form-control" name="net-source-{{ forloop.counter0 }}"> - {% for c_net in compute_networks %} - <option value="net:{{ c_net }}" {% ifequal c_net network.nic %} selected {% endifequal %}>{% trans 'Network' %} {{ c_net }}</option> - {% endfor %} - {% for c_iface in compute_interfaces %} - <option value="iface:{{ c_iface }}" {% ifequal c_iface network.nic %} selected {% endifequal %}>{% trans 'Interface' %} {{ c_iface }}</option> - {% endfor %} - </select> - </div> - <div class="form-group form-inline"> - <label class="col-sm-2 col-sm-offset-1">{% trans "Filter" %} </label> - <input class="form-control" type="text" value="{{ network.filterref }}" readonly/> - <label class="control-label"><em>to</em></label> - <select class="form-control" name="net-nwfilter-{{ forloop.counter0 }}"> - <option value="">{% trans "None" %}</option> - {% for c_filters in compute_nwfilters %} - <option value="{{ c_filters }}" {% ifequal c_filters network.filterref %} selected {% endifequal %}>{{ c_filters }}</option> - {% endfor %} - </select> - </div> - <button class="btn btn-sm btn-primary btn-block" name="change_network" title="{% trans "Apply Network Changes" %}">{% trans "Apply" %}</button> - </div> - </div> - {% endfor %} - </form> - </div> - <div class="clearfix"></div> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="migrate"> - <p>{% trans "For migration both host servers must have equal settings and OS type" %}</p> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Original host" %}</label> - <div class="col-sm-6"> - <p style="margin: 10px -10px 0 0;">{{ compute.name }}</p> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Host migration" %}</label> - <div class="col-sm-6"> - <select name="compute_id" class="form-control"> - {% if computes_count != 1 %} - {% for comp in computes %} - {% if comp.id != compute.id %} - <option value="{{ comp.id }}">{{ comp.name }}</option> - {% endif %} - {% endfor %} - {% endif %} - </select> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Live migration" %}</label> - <div class="col-sm-6"> - <input type="checkbox" name="live_migrate" value="true" id="vm_live_migrate" {% ifequal status 1 %}checked{% endifequal %}> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Unsafe migration" %}</label> - <div class="col-sm-6"> - <input type="checkbox" name="unsafe_migrate" value="true" id="vm_unsafe_migrate"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Delete original" %}</label> - <div class="col-sm-6"> - <input type="checkbox" name="xml_delete" value="true" id="xml_delete" checked> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Offline migration" %}</label> - <div class="col-sm-6"> - <input type="checkbox" name="offline_migrate" value="true" id="offline_migrate" {% ifequal status 5 %}checked{% endifequal %}> - </div> - </div> - {% if computes_count != 1 %} - <button type="submit" class="btn btn-lg btn-success pull-right" name="migrate" onclick="showPleaseWaitDialog();">{% trans "Migrate" %}</button> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled">{% trans "Migrate" %}</button> - {% endif %} - </form> - <div class="clearfix"></div></p> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="xmledit"> - <p>{% trans "If you need to edit xml please Power Off the instance" %}</p> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="col-sm-12" id="xmlheight"> - <textarea id="editor">{{ inst_xml }}</textarea> - </div> - {% ifequal status 5 %} - <input type="hidden" name="inst_xml"> - <button type="submit" class="btn btn-lg btn-success pull-right" name="change_xml"> - {% trans "Change" %} - </button> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled"> - {% trans "Change" %} - </button> - {% endifequal %} - </form> - <div class="clearfix"></div> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="users"> - <div> - <p style="font-weight:bold;"> - {% trans "Instance owners" %} - {% include 'add_instance_owner_block.html' %} - </p> - </div> - <div class="table-responsive"> - <table class="table table-striped sortable-theme-bootstrap" data-sortable> - <tbody class="searchable"> - {% for userinstance in userinstances %} - <tr> - <td><a href="{% url 'account' userinstance.user.id %}">{{ userinstance.user }}</a></td> - <td style="width:30px;"> - <form action="" method="post" style="height:10px" role="form">{% csrf_token %} - <input type="hidden" name="userinstance" value="{{ userinstance.pk }}"> - <button type="submit" class="btn btn-sm btn-default" name="del_owner" title="{% trans "Delete" %}"> - <i class="fa fa-trash"></i> - </button> - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - <div class="clearfix"></div> - </div> - {% endif %} - {% if request.user.is_superuser or request.user.is_staff or userinstance.is_vnc %} - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="vncsettings"> - <p>{% trans "To set console's type, shutdown the instance." %}</p> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="form-group" id="console_type_selection"> - <label for="console_select_type" class="col-sm-2 control-label">{% trans "Type" %}</label> - <div class="col-sm-6"> - <select id="console_select_type" class="form-control" name="console_type"> - <option value="" style="font-weight: bold">{% trans "please choose" %}</option> - {% for ctype in console_types %} - <option value="{{ ctype }}">{{ ctype }}</option> - {% endfor %} - </select> - </div> - <div class="col-sm-3"> - {% ifequal status 5 %} - <button type="submit" class="btn btn-success " name="set_console_type">{% trans "Set" %}</button> - {% else %} - <button class="btn btn-success disabled" name="set_console_type">{% trans "Set" %}</button> - {% endifequal %} - </div> - </div> - </form> - <p>{% trans "To set console listen address, shutdown the instance." %}</p> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="form-group" id="console_listen_address_selection"> - <label for="console_select_listen_address" class="col-sm-2 control-label">{% trans "Listen on" %}</label> - <div class="col-sm-6"> - <select id="console_select_listen_address" class="form-control" name="console_listen_address"> - <option value="" style="font-weight: bold">{% trans "please choose" %}</option> - {% for address, label in console_listen_addresses %} - <option value="{{ address }}">{{ label }}</option> - {% endfor %} - </select> - </div> - <div class="col-sm-3"> - {% ifequal status 5 %} - <button type="submit" class="btn btn-success " name="set_console_listen_address">{% trans "Set" %}</button> - {% else %} - <button class="btn btn-success disabled" name="set_console_listen_address">{% trans "Set" %}</button> - {% endifequal %} - </div> - </div> - </form> - <p>{% trans "To create console password, shutdown the instance." %}</p> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-offset-2 col-sm-10"> - <div class="checkbox"> - <label> - <input type="checkbox" name="auto_pass" value="true" id="console_passwd_gen">{% trans "Generate" %} - </label> - </div> - <div class="checkbox"> - <label> - <input type="checkbox" name="clear_pass" value="true" id="console_passwd_clear">{% trans "Clear" %} - </label> - </div> - </div> - </div> - <div class="form-group"> - <label for="inputPassword1" class="col-sm-2 control-label">{% trans "Password" %}</label> - <div class="col-sm-6" id="console_passwd_manual"> - <input id="console_show_pass" type="password" class="form-control" name="console_passwd" - {% if console_passwd %} - value="{{ console_passwd }}" - {% else %} - placeholder="{% trans "Password" %}" - {% endif %} maxlength="14"> - </div> - <div class="col-sm-3"> - {% if console_passwd %} - <a href="#" name="console_show" class="btn btn-primary btn-md" onclick="show_console()">{% trans "Show" %}</a> - {% endif %} - {% ifequal status 5 %} - <button type="submit" class="btn btn-success" name="set_console_passwd">{% trans "Set" %}</button> - {% else %} - <button class="btn btn-success disabled" name="set_console_passwd">{% trans "Set" %}</button> - {% endifequal %} - </div> - </div> - </form> - <p>{% trans "To set console's keymap, shutdown the instance." %}</p> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <div class="col-sm-offset-2 col-sm-10"> - <div class="checkbox"> - <label> - <input type="checkbox" name="clear_keymap" value="true" id="console_keymap_clear">{% trans "Clear" %} - </label> - </div> - </div> - </div> - <div class="form-group" id="console_keymap_selection"> - <label for="console_select_keymap" class="col-sm-2 control-label">{% trans "Keymap" %}</label> - <div class="col-sm-6"> - <select id="console_select_keymap" class="form-control" name="console_keymap"> - <option value="" style="font-weight: bold">{% trans "please choose" %}</option> - {% for keymap in keymaps %} - <option value="{{ keymap }}">{{ keymap }}</option> - {% endfor %} - </select> - </div> - <div class="col-sm-3"> - {% ifequal status 5 %} - <button type="submit" class="btn btn-success" name="set_console_keymap">{% trans "Set" %}</button> - {% else %} - <button class="btn btn-success disabled" name="set_console_keymap">{% trans "Set" %}</button> - {% endifequal %} - </div> - </div> - </form> - <div class="clearfix"></div> - </div> - {% endif %} - {% if request.user.is_superuser or request.user.userattributes.can_clone_instances %} - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="clone"> - <p style="font-weight:bold;">{% trans "Create a clone" %}</p> - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <label class="col-sm-3 control-label" style="font-weight:normal;">{% trans "Clone Name" %}</label> - {% if request.user.is_superuser %} - <div class="col-sm-4"> - <input id="clone_name" type="text" class="form-control" name="name" value="{{ vname }}-clone"/> - </div> - <div class="col-sm-4"> - <button type="button" class="btn btn-sm btn-success pull-left" name="guess-clone-name" - onclick="guess_clone_name()" style="margin-top: 2px;">{% trans "Guess" %}</button> - </div> - {% elif clone_instance_auto_name %} - <div class="col-sm-4"> - <input id="clone_instance_auto_name" type="text" class="form-control" name="auto_name" value="Automatic" disabled/> - </div> - {% else %} - <div class="col-sm-4"> - <select id="select_clone_name" class="form-control" name="name" size="1"/> - {% for name in clone_free_names %} - <option value="{{ name }}">{{ name }}</option> - {% endfor %} - </select> - </div> - {% endif %} - </div> - {% if request.user.is_superuser %} - <p style="font-weight:bold;">{% trans "Network devices" %}</p> - {% for network in networks %} - <div class="form-group"> - <label class="col-sm-3 control-label" style="font-weight:normal;">eth{{ forloop.counter0 }} ({{ network.nic }})</label> - <div class="col-sm-4"> - <input type="text" class="form-control" name="clone-net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/> - </div> - <div class="col-sm-4"> - <button type="button" class="btn btn-sm btn-success pull-left" name="random-mac-{{ forloop.counter0 }}" - onclick="random_mac('clone-net-mac-{{ forloop.counter0 }}')" style="margin-top: 2px;">{% trans "Random" %}</button> - <button type="button" class="btn btn-sm btn-success pull-left" name="guess-mac-{{ forloop.counter0 }}" - onclick="guess_mac_address('#clone_name', {{ forloop.counter0 }})" style="margin-top: 2px;">{% trans "Guess" %}</button> - </div> - </div> - {% endfor %} - {% else %} - {% for network in networks %} - <input type="hidden" class="form-control" name="clone-net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/> - {% endfor %} - {% endif %} - {% if request.user.is_superuser %} - <p style="font-weight:bold;">{% trans "Storage devices" %}</p> - {% for disk in disks %} - <div class="form-group"> - <label class="col-sm-3 control-label" style="font-weight:normal;">{{ disk.dev }} ({{ disk.storage }})</label> - <div class="col-sm-4"> - <input id="disk_name-{{ disk.dev }}" type="text" class="form-control" name="disk-{{ disk.dev }}" value="{{ disk.image }}"/> - </div> - {% ifequal disk.format 'qcow2' %} - <label class="col-sm-2 control-label" style="font-weight:normal;margin-left:-35px;">{% trans 'Metadata' %}</label> - <div class="col-sm-1"> - <input type="checkbox" name="meta-{{ disk.dev }}" value="true" style="margin-top: 10px;"> - </div> - {% endifequal %} - </div> - {% endfor %} - {% else %} - {% for disk in disks %} - <input id="disk_name-{{ disk.dev }}" type="hidden" class="form-control" name="disk-{{ disk.dev }}" value="{{ disk.image }}"/> - {% endfor %} - {% endif %} - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Title" %}</label> - <div class="col-sm-6"> - <input type="text" name="clone-title" class="form-control"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Description" %}</label> - <div class="col-sm-6"> - <textarea name="clone-description" class="form-control"></textarea> - </div> - </div> - {% ifequal status 5 %} - <button type="submit" class="btn btn-lg btn-success pull-right" name="clone" onclick="showPleaseWaitDialog();">{% trans "Clone" %}</button> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled" name="clone">{% trans "Clone" %}</button> - {% endifequal %} - </form> - <div class="clearfix"></div> - </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="options"> - <form class="form-horizontal" action="" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Title" %}</label> - <div class="col-sm-6"> - <input type="text" name="title" class="form-control" value="{{ title }}"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Description" %}</label> - <div class="col-sm-6"> - <textarea name="description" class="form-control">{{ description }}</textarea> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Is template" %}</label> - <div class="col-sm-6"> - <input type="checkbox" name="is_template" value="True" id="is_template" {% if instance.is_template %}checked{% endif %} {% if not request.user.is_superuser %}disabled{% endif %}> - </div> - </div> - {% ifequal status 5 %} - <button type="submit" class="btn btn-lg btn-success pull-right" name="change_options">{% trans "Change" %}</button> - {% else %} - <button class="btn btn-lg btn-success pull-right disabled" name="change_options">{% trans "Change" %}</button> - {% endifequal %} - </form> - <div class="clearfix"></div> - </div> - {% endif %} - </div> - </div> - </div> - <div role="tabpanel" class="tab-pane" id="graphics"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="active"> - <a href="#graphs" aria-controls="graphs" role="tab" data-toggle="tab"> - {% trans "Real Time" %} - </a> - </li> - <li role="presentation"> - <a href="#logs" aria-controls="logs" role="tab" data-toggle="tab" onclick='update_logs_table("{{ vname }}");'> - {% trans "Logs" %} - </a> - </li> - </ul> - <!-- Tab panes --> - <div class="tab-content"> - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="graphs"> - <div class="panel panel-success"> - <div class="panel-heading"> - <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "CPU Usage" %}</h3> - </div> - <div class="panel-body"> - <div class="flot-chart"> - <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> - <canvas id="cpuChart" width="735" height="160"></canvas> - </div> - </div> - </div> - </div> - <div class="panel panel-default"> - <div class="panel-heading"> - <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "Memory Usage" %}</h3> - </div> - <div class="panel-body"> - <div class="flot-chart"> - <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> - <canvas id="memChart" width="735" height="160"></canvas> - </div> - </div> - </div> - </div> - {% for net in networks %} - <div class="panel panel-info"> - <div class="panel-heading"> - <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "Bandwidth Device" %}: eth{{ forloop.counter0 }}</h3> - </div> - <div class="panel-body"> - <div class="flot-chart"> - <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> - <canvas id="netEth{{ forloop.counter0 }}Chart" width="735" height="160"></canvas> - </div> - </div> - </div> - </div> - {% endfor %} - {% for disk in disks %} - <div class="panel panel-warning"> - <div class="panel-heading"> - <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "Disk I/O device" %}: {{ disk.dev }}</h3> - </div> - <div class="panel-body"> - <div class="flot-chart"> - <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> - <canvas id="blk{{ disk.dev }}Chart" width="735" height="160"></canvas> - </div> - </div> - </div> - </div> - {% endfor %} - <div class="clearfix"></div> + {% for net in networks %} + <div class="panel panel-info"> + <div class="panel-heading"> + <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "Bandwidth Device" %}: eth{{ forloop.counter0 }}</h3> </div> - <div role="tabpanel" class="tab-pane tab-pane-bordered" id="logs"> - <div class="table-responsive"> - <table class="table table-striped sortable-theme-bootstrap" id="logs_table" data-sortable> - <thead> - <tr> - <th>{% trans "Date" %}</th> - <th>{% trans "User" %}</th> - <th>{% trans "Message" %}</th> - </tr> - </thead> - <tbody class="searchable"> - <tr><td colspan="3"><i>{% trans 'None' %}...</i></td></tr> - </tbody> - </table> + <div class="panel-body"> + <div class="flot-chart"> + <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> + <canvas id="netEth{{ forloop.counter0 }}Chart" width="735" height="160"></canvas> + </div> </div> - <div class="clearfix"></div> </div> </div> - </div> - </div> - <div role="tabpanel" class="tab-pane" id="undefine"> - <div role="tabpanel"> - <!-- Nav tabs --> - <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="active"> - <a href="#destroy" aria-controls="destroy" role="tab" data-toggle="tab"> - {% trans "Destroy Instance" %} - </a> - </li> - </ul> - <!-- Tab panes --> - <div class="tab-content"> - <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="destroy"> - <p>{% trans "Delete storage for instance?" %}</p> - {% if request.user.is_superuser or userinstance.is_delete %} - {% ifequal status 3 %} - <button class="btn btn-lg btn-success disabled pull-right" name="delete">{% trans "Destroy" %}</button> - {% else %} - <form class="form-group" method="post" role="form">{% csrf_token %} - <div class="checkbox" style="margin-left: 8px;"> - <label> - <input type="checkbox" name="delete_disk" value="true" checked> - <strong>{% trans "Remove Instance's data" %}</strong> - </label> - </div> - <button type="submit" class="btn btn-lg btn-success pull-right" name="delete">{% trans "Destroy" %}</button> - </form> - {% endifequal %} - {% else %} - <button class="btn btn-lg btn-success disabled pull-right" name="delete">{% trans "Destroy" %}</button> - {% endif %} - <div class="clearfix"></div> + {% endfor %} + {% for disk in disks %} + <div class="panel panel-warning"> + <div class="panel-heading"> + <h3 class="panel-title"><i class="fa fa-long-arrow-right"></i> {% trans "Disk I/O device" %}: {{ disk.dev }}</h3> + </div> + <div class="panel-body"> + <div class="flot-chart"> + <div class="flot-chart-content" id="flot-moving-line-chart" style="padding: 0px; position: relative;"> + <canvas id="blk{{ disk.dev }}Chart" width="735" height="160"></canvas> + </div> + </div> </div> </div> + {% endfor %} + <div class="clearfix"></div> + </div> + <div role="tabpanel" class="tab-pane tab-pane-bordered" id="logs"> + <div class="table-responsive"> + <table class="table table-striped sortable-theme-bootstrap" id="logs_table" data-sortable> + <thead> + <tr> + <th>{% trans "Date" %}</th> + <th>{% trans "User" %}</th> + <th>{% trans "Message" %}</th> + </tr> + </thead> + <tbody class="searchable"> + <tr><td colspan="3"><i>{% trans 'None' %}...</i></td></tr> + </tbody> + </table> </div> + <div class="clearfix"></div> + </div> + </div> + </div> + </div> + <div role="tabpanel" class="tab-pane" id="undefine"> + <div role="tabpanel"> + <!-- Nav tabs --> + <ul class="nav nav-tabs" role="tablist"> + <li role="presentation" class="active"> + <a href="#destroy" aria-controls="destroy" role="tab" data-toggle="tab"> + {% trans "Destroy Instance" %} + </a> + </li> + </ul> + <!-- Tab panes --> + <div class="tab-content"> + <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="destroy"> + <p>{% trans "Delete storage for instance?" %}</p> + {% if request.user.is_superuser or userinstance.is_delete %} + {% ifequal status 3 %} + <button class="btn btn-lg btn-success disabled pull-right" name="delete">{% trans "Destroy" %}</button> + {% else %} + <form class="form-group" method="post" role="form">{% csrf_token %} + <div class="checkbox" style="margin-left: 8px;"> + <label> + <input type="checkbox" name="delete_disk" value="true" checked> + <strong>{% trans "Remove Instance's data" %}</strong> + </label> + </div> + <button type="submit" class="btn btn-lg btn-success pull-right" name="delete">{% trans "Destroy" %}</button> + </form> + {% endifequal %} + {% else %} + <button class="btn btn-lg btn-success disabled pull-right" name="delete">{% trans "Destroy" %}</button> + {% endif %} + <div class="clearfix"></div> </div> </div> </div> </div> </div> + </div> + </div> + </div> {% endblock %} {% block script %} <script src="{% static "js/ace.js" %}" type="text/javascript" charset="utf-8"></script> @@ -1501,11 +1500,11 @@ {% endif %} </script> <script> -$(document).ready(function(){ - $('[data-toggle="popover"]').popover({ - placement : 'top' + $(document).ready(function(){ + $('[data-toggle="popover"]').popover({ + placement : 'top' + }); }); -}); </script> <script> function set_orderlist(obj){ @@ -1516,7 +1515,7 @@ $(document).ready(function(){ }); obj.val(result); } -$(document).ready(function () { + $(document).ready(function () { {# Boot Order Arragements #} jQuery.fn.multiselect = function() { $(this).each(function() { @@ -1567,7 +1566,6 @@ $(document).ready(function () { }); set_orderlist($("#bootorder")); }); - }); </script> <script> @@ -1582,7 +1580,6 @@ $(document).ready(function () { <script src="{% static "js/Chart.bundle.min.js" %}"></script> <script> $('#chartgraphs').on('shown.bs.tab', function (event) { - var cpu_ctx = $("#cpuChart").get(0).getContext("2d"); var cpuChart = new Chart(cpu_ctx, { type: 'line', @@ -1803,7 +1800,6 @@ $(document).ready(function () { $.getJSON('{% url 'inst_graph' compute_id vname %}', function (data) { cpuChart.data.labels.push(data.timeline); - cpuChart.data.datasets[0].data.push(data.cpudata); if (cpuChart.data.datasets[0].data.length > 10){ cpuChart.data.labels.shift(); @@ -1812,8 +1808,6 @@ $(document).ready(function () { cpuChart.update(); memChart.data.labels.push(data.timeline); - - memChart.options.scales.yAxes[0].ticks.max = parseInt(data.memdata.total / 1024); memChart.options.scales.yAxes[0].ticks.stepSize = parseInt(data.memdata.total / (1024 * 5)); memChart.data.datasets[0].data.push(data.memdata.used / 1024); @@ -1823,7 +1817,6 @@ $(document).ready(function () { } memChart.update(); - for (let j = 0; j < data.blkdata.length; j++) { diskChart[data.blkdata[j].dev].data.labels.push(data.timeline); diff --git a/instances/templates/instances.html b/instances/templates/instances.html index 33e0b72..a228c43 100644 --- a/instances/templates/instances.html +++ b/instances/templates/instances.html @@ -7,156 +7,155 @@ {% endblock %} {% block content %} <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% if request.user.is_superuser %} - <a href="{% url 'create_instance' compute.id %}" type="button" class="btn btn-success btn-header pull-right" data-toggle="modal"> - <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> - </a> - {% endif %} - {% if all_host_vms or all_user_vms %} - <div class="pull-right search"> - <input id="filter" class="form-control" type="text" placeholder="Search"> - </div> - {% endif %} - <h1 class="page-header">{{ compute.name }}</h1> - </div> + <div class="row"> + <div class="col-lg-12"> + {% if request.user.is_superuser %} + <a href="{% url 'create_instance' compute.id %}" type="button" class="btn btn-success btn-header pull-right" data-toggle="modal"> + <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> + </a> + {% endif %} + {% if all_host_vms or all_user_vms %} + <div class="pull-right search"> + <input id="filter" class="form-control" type="text" placeholder="Search"> </div> - <div class="row"> - <div class="col-lg-12"> - - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> {% trans "Instances" %} - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> + {% endif %} + <h1 class="page-header">{{ compute.name }}</h1> + </div> + </div> + <div class="row"> + <div class="col-lg-12"> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> {% trans "Instances" %} + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> + {% include 'errors_block.html' %} + <div class="row"> + {% if not all_host_vms %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning" %}:</strong> {% trans "Hypervisor doesn't have any instances" %} </div> </div> - <!-- /.row --> - - {% include 'errors_block.html' %} - <div class="row"> - {% if not all_host_vms %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any instances" %} - </div> - </div> - {% else %} - <div class="col-lg-12"> - <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> - <thead> + {% else %} + <div class="col-lg-12"> + <table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th>{% trans 'Name' %}<br>{% trans 'Description' %}</th> + <th>{% trans 'User' %}</th> + <th>{% trans 'Status' %}</th> + <th>{% trans 'VCPU' %}</th> + <th>{% trans 'Memory' %}</th> + <th data-sortable="false" style="width:205px;">{% trans 'Actions' %}</th> + </tr> + </thead> + <tbody class="searchable"> + {% for host, inst in all_host_vms.items %} + {% for vm, info in inst.items %} <tr> - <th>{% trans 'Name' %}<br>{% trans 'Description' %}</th> - <th>{% trans 'Host' %}<br>{% trans 'User' %}</th> - <th>{% trans 'Status' %}</th> - <th>{% trans 'VCPU' %}</th> - <th>{% trans 'Memory' %}</th> - <th data-sortable="false" style="width:205px;">{% trans 'Actions' %}</th> + <td><a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br><small><em>{{ info.title }}</em></small></td> + <td><em>{% if info.userinstances.count > 0 %}{{ info.userinstances.first_user.user.username }}{% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}){% endif %}{% endif %}</em></td> + <td> + {% ifequal info.status 1 %}<span class="text-success">{% trans "Active" %}</span>{% endifequal %} + {% ifequal info.status 5 %}<span class="text-danger">{% trans "Off" %}</span>{% endifequal %} + {% ifequal info.status 3 %}<span class="text-warning">{% trans "Suspend" %}</span>{% endifequal %} + </td> + <td>{{ info.vcpu }}</td> + <td>{{ info.memory|filesizeformat }}</td> + <td> + <form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="name" value="{{ vm }}"/> + <input type="hidden" name="compute_id" value="{{ host.0 }}"/> + {% ifequal info.status 5 %} + {% if info.is_template %} + <button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');"> + <span class="glyphicon glyphicon-duplicate"></span> + </button> + {% else %} + <button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + {% endif %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}" disabled> + <span class="glyphicon glyphicon-pause"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}" disabled> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}" disabled> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}" disabled> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal info.status 3 %} + <button class="btn btn-sm btn-default" type="submit" name="resume" title="{% trans "Resume" %}"> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}" disabled> + <span class="glyphicon glyphicon-pause"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="powerforce" title="{% trans "Force Off" %}" onclick="return confirm('Are you sure to force it down?')"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}" disabled> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}" disabled> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + {% ifequal info.status 1 %} + <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}" disabled> + <span class="glyphicon glyphicon-play"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="suspend" title="{% trans "Suspend" %}"> + <span class="glyphicon glyphicon-pause"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-off"></span> + </button> + <button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> + <span class="glyphicon glyphicon-refresh"></span> + </button> + <button class="btn btn-sm btn-default" type="button" onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}"> + <span class="glyphicon glyphicon-eye-open"></span> + </button> + {% endifequal %} + </form> + </td> </tr> - </thead> - <tbody class="searchable"> - {% for host, inst in all_host_vms.items %} - {% for vm, info in inst.items %} - <tr> - <td><a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br><small><em>{{ info.title }}</em></small></td> - <td><a href="{% url 'overview' host.0 %}">{{ host.1 }}</a><br><small><em>{% if info.userinstances.count > 0 %}{{ info.userinstances.first_user.user.username }}{% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}){% endif %}{% endif %}</em></small></td> - <td> - {% ifequal info.status 1 %}<span class="text-success">{% trans "Active" %}</span>{% endifequal %} - {% ifequal info.status 5 %}<span class="text-danger">{% trans "Off" %}</span>{% endifequal %} - {% ifequal info.status 3 %}<span class="text-warning">{% trans "Suspend" %}</span>{% endifequal %} - </td> - <td>{{ info.vcpu }}</td> - <td>{{ info.memory|filesizeformat }}</td> - <td><form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="name" value="{{ vm }}"/> - <input type="hidden" name="compute_id" value="{{ host.0 }}"/> - {% ifequal info.status 5 %} - {% if info.is_template %} - <button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');"> - <span class="glyphicon glyphicon-duplicate"></span> - </button> - {% else %} - <button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - {% endif %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}" disabled> - <span class="glyphicon glyphicon-pause"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}" disabled> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}" disabled> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}" disabled> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal info.status 3 %} - <button class="btn btn-sm btn-default" type="submit" name="resume" title="{% trans "Resume" %}"> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}" disabled> - <span class="glyphicon glyphicon-pause"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="powerforce" title="{% trans "Force Off" %}" onclick="return confirm('Are you sure to force it down?')"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}" disabled> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}" disabled> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - {% ifequal info.status 1 %} - <button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}" disabled> - <span class="glyphicon glyphicon-play"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="suspend" title="{% trans "Suspend" %}"> - <span class="glyphicon glyphicon-pause"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-off"></span> - </button> - <button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')"> - <span class="glyphicon glyphicon-refresh"></span> - </button> - <button class="btn btn-sm btn-default" type="button" onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}"> - <span class="glyphicon glyphicon-eye-open"></span> - </button> - {% endifequal %} - </form> - </td> - </tr> - {% endfor %} - {% endfor %} - </tbody> - </table> - </div> - {% endif %} - </div> + {% endfor %} + {% endfor %} + </tbody> + </table> + </div> + {% endif %} + </div> {% endblock %} {% block script %} <script src="{% static "js/sortable.min.js" %}"></script> diff --git a/interfaces/templates/interface.html b/interfaces/templates/interface.html index 5c5c2b5..1693d81 100644 --- a/interfaces/templates/interface.html +++ b/interfaces/templates/interface.html @@ -2,72 +2,72 @@ {% load i18n %} {% block title %}{% trans "Interface" %} - {{ iface }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - <h1 class="page-header">{% trans "Interface:" %} {{ iface }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> - </div> - </div> - <!-- /.row --> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + <h1 class="page-header">{% trans "Interface:" %} {{ iface }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> - {% include 'errors_block.html' %} + {% include 'errors_block.html' %} - <div class="row"> - <div class="col-xs-6 col-sm-4"> - <p>{% trans "Interface:" %}</p> - <p>{% trans "IPv4:" %} ({% ifequal ipv4 None %}None{% else %}{{ ipv4_type }}{% endifequal %})</p> - <p>{% trans "IPv6:" %} ({% ifequal ipv6 None %}None{% else %}{{ ipv6_type }}{% endifequal %})</p> - <p>{% trans "MAC Adress:" %}</p> - <p>{% trans "Interface Type:" %}</p> - {% ifequal itype 'bridge' %} - <p>{% trans "Bridge device" %}</p> + <div class="row"> + <div class="col-xs-6 col-sm-4"> + <p>{% trans "Interface" %}:</p> + <p>{% trans "IPv4" %}: ({% ifequal ipv4 None %}{% trans 'None' %}{% else %}{{ ipv4_type }}{% endifequal %})</p> + <p>{% trans "IPv6" %}: ({% ifequal ipv6 None %}{% trans 'None' %}{% else %}{{ ipv6_type }}{% endifequal %})</p> + <p>{% trans "MAC Adress" %}:</p> + <p>{% trans "Interface Type" %}:</p> + {% ifequal itype 'bridge' %} + <p>{% trans "Bridge device" %}</p> + {% endifequal %} + <p>{% trans "Boot Mode" %}:</p> + <p>{% trans "State" %}:</p> + </div> + <div class="col-xs-6 col-sm-6"> + <p><strong>{{ iface }}</strong></p> + <p>{{ ipv4 }}</p> + <p>{{ ipv6 }}</p> + <p>{{ mac }}</p> + <p>{{ itype }}</p> + {% ifequal itype 'bridge' %} + <p>{{ bridge }}</p> + {% endifequal %} + <p>{{ start_mode }}</p> + <p> + <form action="" method="post" role="form">{% csrf_token %} + {% ifequal state 0 %} + <input type="submit" class="btn btn-xs btn-default" name="start" value="{% trans "Start" %}"> + <input type="submit" class="btn btn-xs btn-default" name="delete" value="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + {% else %} + <input type="submit" class="btn btn-xs btn-default" name="stop" value="{% trans "Stop" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> {% endifequal %} - <p>{% trans "Boot Mode:" %}</p> - <p>{% trans "State:" %}</p> - </div> - <div class="col-xs-6 col-sm-6"> - <p><strong>{{ iface }}</strong></p> - <p>{{ ipv4 }}</p> - <p>{{ ipv6 }}</p> - <p>{{ mac }}</p> - <p>{{ itype }}</p> - {% ifequal itype 'bridge' %} - <p>{{ bridge }}</p> - {% endifequal %} - <p>{{ start_mode }}</p> - <p> - <form action="" method="post" role="form">{% csrf_token %} - {% ifequal state 0 %} - <input type="submit" class="btn btn-xs btn-default" name="start" value="{% trans "Start" %}"> - <input type="submit" class="btn btn-xs btn-default" name="delete" value="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - {% else %} - <input type="submit" class="btn btn-xs btn-default" name="stop" value="{% trans "Stop" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - {% endifequal %} - </form> - </p> - </div> - </div> + </form> + </p> + </div> + </div> {% endblock %} \ No newline at end of file diff --git a/interfaces/templates/interfaces.html b/interfaces/templates/interfaces.html index 8305b88..5b8ef13 100644 --- a/interfaces/templates/interfaces.html +++ b/interfaces/templates/interfaces.html @@ -3,73 +3,73 @@ {% load staticfiles %} {% block title %}{% trans "Interfaces" %} - {{ compute.name }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% include 'create_iface_block.html' %} - <h1 class="page-header">{{ compute.name }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> {% trans "Interfaces" %} - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% include 'create_iface_block.html' %} + <h1 class="page-header">{{ compute.name }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> {% trans "Interfaces" %} + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> + + {% include 'errors_block.html' %} + + <div class="row"> + {% if not ifaces_all %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Interfaces" %} </div> </div> - <!-- /.row --> - - {% include 'errors_block.html' %} - - <div class="row"> - {% if not ifaces_all %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Interfaces" %} + {% else %} + {% for iface in ifaces_all %} + <div class="col-xs-12 col-sm-4"> + <div class="panel {% ifequal iface.state 1 %}panel-success{% else %}panel-danger{% endifequal %} panel-data"> + <div class="panel-heading"> + <h3 class="panel-title"><a href="{% url 'interface' compute.id iface.name %}">{{ iface.name }}</a> + </h3> </div> - </div> - {% else %} - {% for iface in ifaces_all %} - <div class="col-xs-12 col-sm-4"> - <div class="panel {% ifequal iface.state 1 %}panel-success{% else %}panel-danger{% endifequal %} panel-data"> - <div class="panel-heading"> - <h3 class="panel-title"><a href="{% url 'interface' compute.id iface.name %}">{{ iface.name }}</a> - </h3> + <div class="panel-body"> + <div class="row"> + <div class="col-xs-4 col-sm-4"> + <p><strong>{% trans "Type:" %}</strong></p> + <p><strong>{% trans "MAC:" %}</strong></p> </div> - <div class="panel-body"> - <div class="row"> - <div class="col-xs-4 col-sm-4"> - <p><strong>{% trans "Type:" %}</strong></p> - <p><strong>{% trans "MAC:" %}</strong></p> - </div> - <div class="col-xs-6 col-sm-7"> - <p>{{ iface.type }}</p> - <p>{{ iface.mac }}</p> - </div> - </div> + <div class="col-xs-6 col-sm-7"> + <p>{{ iface.type }}</p> + <p>{{ iface.mac }}</p> </div> </div> </div> - {% endfor %} - {% endif %} - </div> + </div> + </div> + {% endfor %} + {% endif %} + </div> {% endblock %} {% block script %} <script> diff --git a/logs/templates/paging.html b/logs/templates/paging.html index 2cf8f48..dc72a8c 100644 --- a/logs/templates/paging.html +++ b/logs/templates/paging.html @@ -5,7 +5,7 @@ {% endif %} {% if has_next_page %} - <a href="{% url 'showlogspage' page|add:"1" %}">→</a> + <a href="{% url 'showlogspage' page|add:"1" %}">→</a> {% else %} {% endif %} diff --git a/logs/templates/showlogs.html b/logs/templates/showlogs.html index bb6d688..f5f215c 100644 --- a/logs/templates/showlogs.html +++ b/logs/templates/showlogs.html @@ -2,53 +2,53 @@ {% load i18n %} {% block title %}{% trans "Logs" %}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - <h1 class="page-header">{% trans "Logs" %}</h1> - </div> - </div> - <!-- /.row --> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + <h1 class="page-header">{% trans "Logs" %}</h1> + </div> + </div> + <!-- /.row --> - {% include 'errors_block.html' %} + {% include 'errors_block.html' %} - <div class="row"> + <div class="row"> + <div class="col-lg-12"> + {% if not logs %} <div class="col-lg-12"> - {% if not logs %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Logs" %} - </div> - </div> - {% else %} - {% include "paging.html" %} - <div class="table-responsive"> - <table class="table table-bordered table-hover"> - <thead> - <tr> - <th>#</th> - <th>{% trans "Date" %}</th> - <th>{% trans "User" %}</th> - <th>{% trans "Instance" %}</th> - <th>{% trans "Message" %}</th> - </tr> - </thead> - <tbody> - {% for log in logs %} - <tr> - <td>{{ log.id }}</td> - <td style="width:130px;">{{ log.date|date:"M d H:i:s" }}</td> - <td>{{ log.user }}</a></td> - <td>{{ log.instance }}</a></td> - <td>{{ log.message }}</td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% include "paging.html" %} - {% endif %} + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning" %}:</strong> {% trans "You don't have any Logs" %} + </div> </div> - </div> + {% else %} + {% include "paging.html" %} + <div class="table-responsive"> + <table class="table table-bordered table-hover"> + <thead> + <tr> + <th>#</th> + <th>{% trans "Date" %}</th> + <th>{% trans "User" %}</th> + <th>{% trans "Instance" %}</th> + <th>{% trans "Message" %}</th> + </tr> + </thead> + <tbody> + {% for log in logs %} + <tr> + <td>{{ log.id }}</td> + <td style="width:130px;">{{ log.date|date:"M d H:i:s" }}</td> + <td>{{ log.user }}</td> + <td>{{ log.instance }}</td> + <td>{{ log.message }}</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% include "paging.html" %} + {% endif %} + </div> + </div> {% endblock %} diff --git a/networks/templates/modify_fixed_address.html b/networks/templates/modify_fixed_address.html index 63c42f4..fd1c938 100644 --- a/networks/templates/modify_fixed_address.html +++ b/networks/templates/modify_fixed_address.html @@ -39,7 +39,6 @@ <input type="text" class="form-control" name="mac" required pattern="[0-9\/\:]+"> </div> </div> - </div> </div> <div class="modal-footer"> diff --git a/networks/templates/network.html b/networks/templates/network.html index 5f2949a..46c79ab 100644 --- a/networks/templates/network.html +++ b/networks/templates/network.html @@ -3,219 +3,219 @@ {% load staticfiles %} {% block title %}{% trans "Network" %} - {{ pool }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - <h1 class="page-header">{% trans "Network:" %} {{ pool }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> - </div> - </div> - <!-- /.row --> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + <h1 class="page-header">{% trans "Network:" %} {{ pool }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> - {% include 'errors_block.html' %} - {% include 'messages_block.html' %} + {% include 'errors_block.html' %} + {% include 'messages_block.html' %} - <div class="row"> - <div class="col-xs-6 col-sm-4"> - <p>{% trans "Network name" %}:</p> - <p>{% trans "Device" %}:</p> - <p>{% trans "State" %}:</p> - <p>{% trans "Autostart" %}:</p> - </div> - <div class="col-xs-6 col-sm-6"> - <p>{{ pool }}</p> - <p>{{ device }}</p> - <p> - <form action="" method="post" role="form">{% csrf_token %} - {% ifequal state 0 %} - <input type="submit" class="btn btn-xs btn-default" name="start" value="{% trans "Start" %}"> - <input type="submit" class="btn btn-xs btn-default" name="delete" value="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - {% else %} - <input type="submit" class="btn btn-xs btn-default" name="stop" value="{% trans "Stop" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - {% endifequal %} - </form> - </p> - <p> - <form action="" method="post" role="form">{% csrf_token %} - {% ifequal autostart 0 %} - <input type="submit" class="btn btn-xs btn-default" name="set_autostart" value="{% trans "Enable" %}"> - {% else %} - <input type="submit" class="btn btn-xs btn-default" name="unset_autostart" onclick="return confirm('{% trans "Are you sure?" %}')" value="{% trans "Disable" %}"> - {% endifequal %} - </form> - </p> + <div class="row"> + <div class="col-xs-6 col-sm-4"> + <p>{% trans "Network name" %}:</p> + <p>{% trans "Device" %}:</p> + <p>{% trans "State" %}:</p> + <p>{% trans "Autostart" %}:</p> + </div> + <div class="col-xs-6 col-sm-6"> + <p>{{ pool }}</p> + <p>{{ device }}</p> + <p> + <form action="" method="post" role="form">{% csrf_token %} + {% ifequal state 0 %} + <input type="submit" class="btn btn-xs btn-default" name="start" value="{% trans "Start" %}"> + <input type="submit" class="btn btn-xs btn-default" name="delete" value="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + {% else %} + <input type="submit" class="btn btn-xs btn-default" name="stop" value="{% trans "Stop" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + {% endifequal %} + </form> + </p> + <p> + <form action="" method="post" role="form">{% csrf_token %} + {% ifequal autostart 0 %} + <input type="submit" class="btn btn-xs btn-default" name="set_autostart" value="{% trans "Enable" %}"> + {% else %} + <input type="submit" class="btn btn-xs btn-default" name="unset_autostart" onclick="return confirm('{% trans "Are you sure?" %}')" value="{% trans "Disable" %}"> + {% endifequal %} + </form> + </p> + </div> + </div> + <div class="row"> + <h3 class="page-header"></h3> + </div> + <div class="panel-group" id="accordion"> + <div class="panel panel-default"> + <div class="panel-heading"> + <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne"> + {% trans 'XML' %} + </a> + </div> + <div id="collapseOne" class="panel-collapse collapse"> + <div class="panel-body"> + <form class="form-inline" method="post" role="form">{% csrf_token %} + <div class="col-xs-12" id="xmlheight"> + <input type="hidden" name="edit_xml"/> + <textarea id="edit_editor">{{ xml }}</textarea> + </div> + <button type="submit" class="btn btn-primary pull-right" name="edit_network"> + {% trans "Edit" %} + </button> + </form> </div> </div> - <div class="row"> - <h3 class="page-header"></h3> - </div> - <div class="panel-group" id="accordion"> - <div class="panel panel-default"> - <div class="panel-heading"> - <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne"> - {% trans 'XML' %} - </a> - </div> - <div id="collapseOne" class="panel-collapse collapse"> - <div class="panel-body"> - <form class="form-inline" method="post" role="form">{% csrf_token %} - <div class="col-xs-12" id="xmlheight"> - <input type="hidden" name="edit_xml"/> - <textarea id="edit_editor">{{ xml }}</textarea> - </div> - <button type="submit" class="btn btn-primary pull-right" name="edit_network"> - {% trans "Edit" %} - </button> - </form> - </div> - </div> - </div> - </div> - <div class="row"> - <h3 class="page-header">{% trans "IPv4 Configuration" %}</h3> - </div> - <div class="row"> - <div class="col-xs-6 col-sm-4"> - <p>{% trans "IPv4 Forwarding:" %}</p> - <p>{% trans "Network:" %}</p> - <p>{% trans "DHCP:" %}</p> - {% if ipv4_dhcp_range_start and ipv4_dhcp_range_end %} - <p>{% trans "Start:" %}</p> - <p>{% trans "End:" %}</p> - {% endif %} - </div> - <div class="col-xs-6 col-sm-4"> - <p> - {% ifequal ipv4_forward.0 'nat' %} - {% trans "NAT" %} - {% endifequal %} - {% ifequal ipv4_forward.0 'route' %} - {% trans "ROUTE" %} - {% endifequal %} - {% ifequal ipv4_forward.0 'bridge' %} - {% trans "BRIDGE" %} - {% endifequal %} - {% if not ipv4_forward.0 %} - {% trans "ISOLATE" %} - {% endif %} - </p> - <p>{{ ipv4_network }}</p> - <p> - {% if ipv4_dhcp_range_start and ipv4_dhcp_range_end %} - <span class="text-success">{% trans "ON" %}</span> - {% else %} - <span class="text-danger">{% trans "OFF" %}</span> - {% endif %} - </p> - {% if ipv4_dhcp_range_start and ipv4_dhcp_range_end %} - <form method="post" role="form">{% csrf_token %} - {% if state %} - <p>{{ ipv4_dhcp_range_start }}</p> - <p>{{ ipv4_dhcp_range_end }}</p> - {% else %} - <p><input name="range_start" value="{{ ipv4_dhcp_range_start }}"/></p> - <p><input name="range_end" value="{{ ipv4_dhcp_range_end }}"/></p> - <div class="col-xs-10 col-sm-8"> - <input type="submit" class="btn btn-primary btn-block" value="Apply" - name="modify_dhcp_range" - title="Edit DHCP Range" onclick="return confirm('{% trans "Are you sure?" %}')"/> - </div> - {% endif %} - </form> - {% endif %} - </div> - </div> - {% ifequal ipv4_forward.0 'nat' %} - {% if state %} - {% include 'modify_fixed_address.html' %} + </div> + </div> + <div class="row"> + <h3 class="page-header">{% trans "IPv4 Configuration" %}</h3> + </div> + <div class="row"> + <div class="col-xs-6 col-sm-4"> + <p>{% trans "IPv4 Forwarding:" %}</p> + <p>{% trans "Network:" %}</p> + <p>{% trans "DHCP:" %}</p> + {% if ipv4_dhcp_range_start and ipv4_dhcp_range_end %} + <p>{% trans "Start:" %}</p> + <p>{% trans "End:" %}</p> {% endif %} - <div class="row"> - <h3 class="page-header">{% trans "Fixed Address" %}</h3> - </div> - {% endifequal %} - {% if fixed_address %} - <div class="row"> - <div class="col-xs-12"> - <div class="panel-group" id="accordion"> - <div class="panel panel-default"> - <div class="panel-heading"> - <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"> - {% trans 'Show' %} - </a> - </div> - <div id="collapseTwo" class="panel-collapse collapse"> - <div class="panel-body"> + </div> + <div class="col-xs-6 col-sm-4"> + <p> + {% ifequal ipv4_forward.0 'nat' %} + {% trans "NAT" %} + {% endifequal %} + {% ifequal ipv4_forward.0 'route' %} + {% trans "ROUTE" %} + {% endifequal %} + {% ifequal ipv4_forward.0 'bridge' %} + {% trans "BRIDGE" %} + {% endifequal %} + {% if not ipv4_forward.0 %} + {% trans "ISOLATE" %} + {% endif %} + </p> + <p>{{ ipv4_network }}</p> + <p> + {% if ipv4_dhcp_range_start and ipv4_dhcp_range_end %} + <span class="text-success">{% trans "ON" %}</span> + {% else %} + <span class="text-danger">{% trans "OFF" %}</span> + {% endif %} + </p> + {% if ipv4_dhcp_range_start and ipv4_dhcp_range_end %} + <form method="post" role="form">{% csrf_token %} + {% if state %} + <p>{{ ipv4_dhcp_range_start }}</p> + <p>{{ ipv4_dhcp_range_end }}</p> + {% else %} + <p><input name="range_start" value="{{ ipv4_dhcp_range_start }}"/></p> + <p><input name="range_end" value="{{ ipv4_dhcp_range_end }}"/></p> + <div class="col-xs-10 col-sm-8"> + <input type="submit" class="btn btn-primary btn-block" value="Apply" + name="modify_dhcp_range" + title="Edit DHCP Range" onclick="return confirm('{% trans "Are you sure?" %}')"/> + </div> + {% endif %} + </form> + {% endif %} + </div> + </div> + {% ifequal ipv4_forward.0 'nat' %} + {% if state %} + {% include 'modify_fixed_address.html' %} + {% endif %} + <div class="row"> + <h3 class="page-header">{% trans "Fixed Address" %}</h3> + </div> + {% endifequal %} + {% if fixed_address %} + <div class="row"> + <div class="col-xs-12"> + <div class="panel-group" id="accordion"> + <div class="panel panel-default"> + <div class="panel-heading"> + <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"> + {% trans 'Show' %} + </a> + </div> + <div id="collapseTwo" class="panel-collapse collapse"> + <div class="panel-body"> - <div class="input-append form-inline pull-right"> - <div class="form-group"> - <input type="text" class="form-control" id="filter_input"> - </div> - <input type="button" class="btn btn-default" id="filter_button" value="Filter"> - <button type="button" class="btn btn-default" id="filter_clear">{% trans 'Clear' %}</button> - </div> - <table class="table table-hover"> - <thead> - <tr> - <th style="text-align: center">{% trans "MAC" %}</th> - <th style="text-align: center">{% trans "Address" %}</th> - <th style="text-align: center">{% trans "Name" %}</th> - <th style="text-align: center">{% trans "Action" %}</th> - </tr> - </thead> - <tbody style="text-align: center"> - {% for fix in fixed_address %} - <tr> - <form method="post" role="form">{% csrf_token %} - <td><label class="form-control" disabled="true">{{ fix.mac }}</label></td> - <td><input class="form-control" value="{{ fix.ip }}" name="address" /></td> - <td><input class="form-control" value="{{ fix.name }}" name="name" /></td> - <td> - <input hidden name="mac" value="{{ fix.mac }}"/> - <button type="submit" class="btn btn-sm btn-primary" - name="modify_fixed_address" - title="Edit entry" onclick="return confirm('{% trans "Are you sure?" %}')"> - <i class="glyphicon glyphicon-save"></i> - </button> - <button type="submit" class="btn btn-sm btn-danger" - name="delete_fixed_address" - title="Delete entry" onclick="return confirm('{% trans "Are you sure?" %}')"> - <i class="glyphicon glyphicon-trash"></i> - </button> - </td> - </form> - </tr> - {% endfor %} - </tbody> - </table> + <div class="input-append form-inline pull-right"> + <div class="form-group"> + <input type="text" class="form-control" id="filter_input"> </div> + <input type="button" class="btn btn-default" id="filter_button" value="Filter"> + <button type="button" class="btn btn-default" id="filter_clear">{% trans 'Clear' %}</button> </div> + <table class="table table-hover"> + <thead> + <tr> + <th style="text-align: center">{% trans "MAC" %}</th> + <th style="text-align: center">{% trans "Address" %}</th> + <th style="text-align: center">{% trans "Name" %}</th> + <th style="text-align: center">{% trans "Action" %}</th> + </tr> + </thead> + <tbody style="text-align: center"> + {% for fix in fixed_address %} + <tr> + <form method="post" role="form">{% csrf_token %} + <td><label class="form-control" disabled="true">{{ fix.mac }}</label></td> + <td><input class="form-control" value="{{ fix.ip }}" name="address" /></td> + <td><input class="form-control" value="{{ fix.name }}" name="name" /></td> + <td> + <input hidden name="mac" value="{{ fix.mac }}"/> + <button type="submit" class="btn btn-sm btn-primary" + name="modify_fixed_address" + title="Edit entry" onclick="return confirm('{% trans "Are you sure?" %}')"> + <i class="glyphicon glyphicon-save"></i> + </button> + <button type="submit" class="btn btn-sm btn-danger" + name="delete_fixed_address" + title="Delete entry" onclick="return confirm('{% trans "Are you sure?" %}')"> + <i class="glyphicon glyphicon-trash"></i> + </button> + </td> + </form> + </tr> + {% endfor %} + </tbody> + </table> </div> </div> </div> </div> - {% endif %} + </div> + </div> + {% endif %} {% endblock %} {% block script %} <script> diff --git a/networks/templates/networks.html b/networks/templates/networks.html index b57f7c6..ac6a3a8 100644 --- a/networks/templates/networks.html +++ b/networks/templates/networks.html @@ -2,72 +2,72 @@ {% load i18n %} {% block title %}{% trans "Networks" %} - {{ compute.name }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% include 'create_net_block.html' %} - <h1 class="page-header">{{ compute.name }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> {% trans "Networks" %} - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% include 'create_net_block.html' %} + <h1 class="page-header">{{ compute.name }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> {% trans "Networks" %} + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> + + {% include 'errors_block.html' %} + + <div class="row"> + {% if not networks %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i><strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Networks" %} </div> </div> - <!-- /.row --> - - {% include 'errors_block.html' %} - - <div class="row"> - {% if not networks %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Networks" %} + {% else %} + {% for pool in networks %} + <div class="col-xs-12 col-sm-4"> + <div class="panel {% if pool.status %}panel-success{% else %}panel-danger{% endif %} panel-data"> + <div class="panel-heading"> + <h3 class="panel-title"><a href="{% url 'network' compute.id pool.name %}">{{ pool.name }}</a></h3> </div> - </div> - {% else %} - {% for pool in networks %} - <div class="col-xs-12 col-sm-4"> - <div class="panel {% if pool.status %}panel-success{% else %}panel-danger{% endif %} panel-data"> - <div class="panel-heading"> - <h3 class="panel-title"><a href="{% url 'network' compute.id pool.name %}">{{ pool.name }}</a></h3> + <div class="panel-body"> + <div class="row"> + <div class="col-xs-4 col-sm-4"> + <p><strong>{% trans "Device:" %}</strong></p> + <p><strong>{% trans "Forward:" %}</strong></p> </div> - <div class="panel-body"> - <div class="row"> - <div class="col-xs-4 col-sm-4"> - <p><strong>{% trans "Device:" %}</strong></p> - <p><strong>{% trans "Forward:" %}</strong></p> - </div> - <div class="col-xs-6 col-sm-7"> - <p>{{ pool.device }}</p> - <p>{{ pool.forward|upper }}</p> - </div> - </div> + <div class="col-xs-6 col-sm-7"> + <p>{{ pool.device }}</p> + <p>{{ pool.forward|upper }}</p> </div> </div> </div> - {% endfor %} - {% endif %} - </div> + </div> + </div> + {% endfor %} + {% endif %} + </div> {% endblock %} {% block script %} <script> diff --git a/nwfilters/templates/add_nwf_rule.html b/nwfilters/templates/add_nwf_rule.html index bd124e4..accc19d 100644 --- a/nwfilters/templates/add_nwf_rule.html +++ b/nwfilters/templates/add_nwf_rule.html @@ -1,8 +1,8 @@ {% load i18n %} {% if request.user.is_superuser %} - <a href="#AddNWFilterRule" type="button" class="btn btn-success pull-right" data-toggle="modal"> - <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> - </a> + <a href="#AddNWFilterRule" type="button" class="btn btn-success pull-right" data-toggle="modal"> + <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> + </a> <!-- Modal Secret --> <div class="modal fade" id="AddNWFilterRule" tabindex="-1" role="dialog" aria-labelledby="AddNWFilterRule" aria-hidden="true"> diff --git a/nwfilters/templates/nwfilters.html b/nwfilters/templates/nwfilters.html index 28c7372..21568c0 100644 --- a/nwfilters/templates/nwfilters.html +++ b/nwfilters/templates/nwfilters.html @@ -3,158 +3,158 @@ {% load staticfiles %} {% block title %}{% trans "NWFilters" %} - {{ compute.name }}{% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% include 'create_nwfilter_block.html' %} - <h1 class="page-header">{{ compute.name }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> {% trans "NWFilters" %} - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> - </div> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% include 'create_nwfilter_block.html' %} + <h1 class="page-header">{{ compute.name }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> {% trans "NWFilters" %} + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> + </div> + </div> + <!-- /.row --> + + {% include 'errors_block.html' %} + {% include 'messages_block.html' %} + + <div class="row"> + <div class="col-lg-12"> + + <div class="pull-right"> + <input id="filter" class="form-control" type="text" placeholder="Search"> </div> - <!-- /.row --> - -{% include 'errors_block.html' %} -{% include 'messages_block.html' %} - -<div class="row"> - <div class="col-lg-12"> - - <div class="pull-right"> - <input id="filter" class="form-control" type="text" placeholder="Search"> - </div> - <div class="row"> - <h3 class="page-header">{% trans "NWFilters" %}</h3> - </div> - {% if nwfilters %} - <div class="table-responsive"> - <table class="table table-striped sortable-theme-bootstrap" data-sortable> - <thead> - <tr> - <th style="width: 45px;">#</th> - <th>{% trans "UUID" %}</th> - <th>{% trans "Name" %}</th> - <th data-sortable="false" colspan="3">{% trans "Action" %}</th> - </tr> - </thead> - <tbody class="searchable"> - {% for nwfilter in nwfilters %} + <div class="row"> + <h3 class="page-header">{% trans "NWFilters" %}</h3> + </div> + {% if nwfilters %} + <div class="table-responsive"> + <table class="table table-striped sortable-theme-bootstrap" data-sortable> + <thead> <tr> - <td>{{ forloop.counter }}</td> - <td><a href="{% url "nwfilter" compute.id nwfilter.name %} ">{{ nwfilter.uuid }}</a></td> - <td>{{ nwfilter.name }}</td> - <td style="width:30px;"> - <div class="modal fade" id="Show{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="showNWFilter" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Details of NWFilter" %}: <span class="text-danger">{{ nwfilter.name }}</span></h4> - </div> - <div class="modal-body"> - <pre> - <code> - {{ nwfilter.xml }} - </code> - </pre> + <th style="width: 45px;">#</th> + <th>{% trans "UUID" %}</th> + <th>{% trans "Name" %}</th> + <th data-sortable="false" colspan="3">{% trans "Action" %}</th> + </tr> + </thead> + <tbody class="searchable"> + {% for nwfilter in nwfilters %} + <tr> + <td>{{ forloop.counter }}</td> + <td><a href="{% url "nwfilter" compute.id nwfilter.name %} ">{{ nwfilter.uuid }}</a></td> + <td>{{ nwfilter.name }}</td> + <td style="width:30px;"> + <div class="modal fade" id="Show{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="showNWFilter" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Details of NWFilter" %}: <span class="text-danger">{{ nwfilter.name }}</span></h4> </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> + <div class="modal-body"> + <pre> + <code> + {{ nwfilter.xml }} + </code> + </pre> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> + </div> + </div> <!-- /.modal-content --> + </div> <!-- /.modal-dialog --> + </div> <!-- /.modal --> + <a data-toggle="modal" href="#Show{{ forloop.counter }}" class="btn btn-sm btn-default" title="{% trans "Show" %}"><i class="fa fa-eye"></i></a> + </td> + <td style="width:30px;"> + <div class="modal fade" id="Clone{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="addNwFilterLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Clone nwfilter" %} <span class="text-danger">{{ nwfilter.name }}</span></h4> </div> - </div> <!-- /.modal-content --> - </div> <!-- /.modal-dialog --> - </div> <!-- /.modal --> - <a data-toggle="modal" href="#Show{{ forloop.counter }}" class="btn btn-sm btn-default" title="{% trans "Show" %}"><i class="fa fa-eye"></i></a> - </td> - <td style="width:30px;"> - <div class="modal fade" id="Clone{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="addNwFilterLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Clone nwfilter" %} <span class="text-danger">{{ nwfilter.name }}</span></h4> - </div> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Name" %}</label> - <div class="col-sm-6"> - <input type="text" class="form-control" name="cln_name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+"> - <input type="hidden" name="nwfiltername" value="{{ nwfilter.name }}"> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Name" %}</label> + <div class="col-sm-6"> + <input type="text" class="form-control" name="cln_name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+"> + <input type="hidden" name="nwfiltername" value="{{ nwfilter.name }}"> + </div> </div> </div> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> - <button type="submit" class="btn btn-primary" name="cln_nwfilter">{% trans "Clone" %}</button> - </div> - </form> - </div> <!-- /.modal-content --> - </div> <!-- /.modal-dialog --> - </div> <!-- /.modal --> - <a data-toggle="modal" href="#Clone{{ forloop.counter }}" class="btn btn-sm btn-default" title="{% trans "Clone" %}"><i class="fa fa-files-o"></i></a> - </td> - <td style="width:30px;"> - <form action="" method="post" style="height:10px" role="form">{% csrf_token %} - <input type="hidden" name="nwfiltername" value="{{ nwfilter.name }}"> - <button type="submit" class="btn btn-sm btn-default" name="del_nwfilter" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - <i class="fa fa-trash"></i> - </button> - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% else %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any NWFilters" %} + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> + <button type="submit" class="btn btn-primary" name="cln_nwfilter">{% trans "Clone" %}</button> + </div> + </form> + </div> <!-- /.modal-content --> + </div> <!-- /.modal-dialog --> + </div> <!-- /.modal --> + <a data-toggle="modal" href="#Clone{{ forloop.counter }}" class="btn btn-sm btn-default" title="{% trans "Clone" %}"><i class="fa fa-files-o"></i></a> + </td> + <td style="width:30px;"> + <form action="" method="post" style="height:10px" role="form">{% csrf_token %} + <input type="hidden" name="nwfiltername" value="{{ nwfilter.name }}"> + <button type="submit" class="btn btn-sm btn-default" name="del_nwfilter" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + <i class="fa fa-trash"></i> + </button> + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% else %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any NWFilters" %} + </div> </div> + {% endif %} </div> - {% endif %} </div> -</div> {% endblock %} {% block script %} - <script src="{% static "js/sortable.min.js" %}"></script> - <script> - $(document).ready(function () { - (function ($) { - $('#filter').keyup(function () { - var rex = new RegExp($(this).val(), 'i'); - $('.searchable tr').hide(); - $('.searchable tr').filter(function () { - return rex.test($(this).text()); - }).show(); - }) - }(jQuery)); - }); - </script> +<script src="{% static "js/sortable.min.js" %}"></script> +<script> + $(document).ready(function () { + (function ($) { + $('#filter').keyup(function () { + var rex = new RegExp($(this).val(), 'i'); + $('.searchable tr').hide(); + $('.searchable tr').filter(function () { + return rex.test($(this).text()); + }).show(); + }) + }(jQuery)); + }); +</script> <script src="{% static "js/ace.js" %}"></script> <script> diff --git a/secrets/templates/secrets.html b/secrets/templates/secrets.html index 7f781ce..4b1be36 100644 --- a/secrets/templates/secrets.html +++ b/secrets/templates/secrets.html @@ -6,122 +6,122 @@ <link rel="stylesheet" href="{% static "css/sortable-theme-bootstrap.css" %}" /> {% endblock %} {% block content %} - <!-- Page Heading --> - <div class="row"> - <div class="col-lg-12"> - {% include 'create_secret_block.html' %} - <h1 class="page-header">{% trans "Secrets" %}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> {% trans "Secrets" %} - </li> - </ol> + <!-- Page Heading --> + <div class="row"> + <div class="col-lg-12"> + {% include 'create_secret_block.html' %} + <h1 class="page-header">{% trans "Secrets" %}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> {% trans "Secrets" %} + </li> + </ol> + </div> + </div> + <!-- /.row --> + + {% include 'errors_block.html' %} + + <div class="row"> + {% if not secrets_all %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Secrets" %} </div> </div> - <!-- /.row --> + {% else %} + <div class="col-lg-12"> + <div class="table-responsive"> + <table class="table table-hover sortable-theme-bootstrap" data-sortable> + <thead> + <tr class="active"> + <th>{% trans "UUID" %}</th> + <th>{% trans "Type" %}</th> + <th>{% trans "Usage" %}</th> + <th data-sortable="false" style="width:90px;">{% trans "Action" %}</th> + </tr> + </thead> + <tbody> + {% for secret in secrets_all %} + <tr> + <td>{{ secret.uuid }}</td> + <td>{% ifequal secret.usageType 0 %} + {% trans "volume" %} + {% endifequal %} + {% ifequal secret.usageType 1 %} + {% trans "iscsi" %} + {% endifequal %} + {% ifequal secret.usageType 2 %} + {% trans "ceph" %} + {% endifequal %} + </td> + <td>{{ secret.usage }}</td> + <td> + <form action="" method="post" role="form">{% csrf_token %} + <input type="hidden" name="uuid" value="{{ secret.uuid }}"/> + <a data-toggle="modal" href="#editSecret{{ secret.uuid }}" class="btn btn-sm btn-default" title="{% trans "Edit" %}"> + <span class="glyphicon glyphicon-pencil"></span> + </a> + <button type="submit" class="btn btn-sm btn-default" name="delete" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + <span class="glyphicon glyphicon-trash"></span> + </button> + </form> - {% include 'errors_block.html' %} - - <div class="row"> - {% if not secrets_all %} - <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Secrets" %} - </div> - </div> - {% else %} - <div class="col-lg-12"> - <div class="table-responsive"> - <table class="table table-hover sortable-theme-bootstrap" data-sortable> - <thead> - <tr class="active"> - <th>{% trans "UUID" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Usage" %}</th> - <th data-sortable="false" style="width:90px;">{% trans "Action" %}</th> - </tr> - </thead> - <tbody> - {% for secret in secrets_all %} - <tr> - <td>{{ secret.uuid }}</td> - <td>{% ifequal secret.usageType 0 %} - {% trans "volume" %} - {% endifequal %} - {% ifequal secret.usageType 1 %} - {% trans "iscsi" %} - {% endifequal %} - {% ifequal secret.usageType 2 %} - {% trans "ceph" %} - {% endifequal %} - </td> - <td>{{ secret.usage }}</td> - <td> - <form action="" method="post" role="form">{% csrf_token %} - <input type="hidden" name="uuid" value="{{ secret.uuid }}"/> - <a data-toggle="modal" href="#editSecret{{ secret.uuid }}" class="btn btn-sm btn-default" title="{% trans "Edit" %}"> - <span class="glyphicon glyphicon-pencil"></span> - </a> - <button type="submit" class="btn btn-sm btn-default" name="delete" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - <span class="glyphicon glyphicon-trash"></span> - </button> - </form> - - <!-- Modal --> - <div class="modal fade" id="editSecret{{ secret.uuid }}" tabindex="-1" role="dialog" - aria-labelledby="editSecret" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Set secret value" %}</h4> + <!-- Modal --> + <div class="modal fade" id="editSecret{{ secret.uuid }}" tabindex="-1" role="dialog" + aria-labelledby="editSecret" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Set secret value" %}</h4> + </div> + <div class="tab-content"> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Value" %}</label> + <div class="col-sm-6"> + <input type="hidden" name="uuid" value="{{ secret.uuid }}"> + <input type="text" name="value" class="form-control" value="{{ secret.value }}" maxlength="45" required pattern="[a-zA-Z0-9]$+"> + </div> </div> - <div class="tab-content"> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Value" %}</label> - <div class="col-sm-6"> - <input type="hidden" name="uuid" value="{{ secret.uuid }}"> - <input type="text" name="value" class="form-control" value="{{ secret.value }}" maxlength="45" required pattern="[a-zA-Z0-9]$+"> - </div> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> - <button type="submit" class="btn btn-primary" name="set_value">{% trans "Set" %}</button> - </div> - </form> - </div> <!-- /.modal-content --> - </div> <!-- /.tab-content --> - </div> <!-- /.modal-dialog --> - </div> <!-- /.modal --> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - </div> - {% endif %} + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> + <button type="submit" class="btn btn-primary" name="set_value">{% trans "Set" %}</button> + </div> + </form> + </div> <!-- /.modal-content --> + </div> <!-- /.tab-content --> + </div> <!-- /.modal-dialog --> + </div> <!-- /.modal --> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> </div> + {% endif %} + </div> {% endblock %} {% block script %} <script src="{% static "js/sortable.min.js" %}"></script> diff --git a/storages/templates/storage.html b/storages/templates/storage.html index e806cf3..e7ddfe1 100644 --- a/storages/templates/storage.html +++ b/storages/templates/storage.html @@ -7,194 +7,194 @@ {% endblock %} {% block content %} -<!-- Page Heading --> -<div class="row"> - <div class="col-lg-12"> - {% include 'create_stg_vol_block.html' %} - <h1 class="page-header">{% trans "Storage:" %} {{ pool }}</h1> - <ol class="breadcrumb"> - <li class="active"> - <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> - </li> - <li> - <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> - </li> - <li> - <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> - </li> - <li> - <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> - </li> - <li> - <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> - </li> - <li> - <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> - </li> - <li> - <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> - </li> - </ol> - </div> -</div> -<!-- /.row --> - -{% include 'errors_block.html' %} -{% include 'messages_block.html' %} - -<div class="row"> - <div class="col-xs-6 col-sm-6"> - <p>{% trans "Pool name:" %}</p> - <p>{% trans "Pool type:" %}</p> - <p>{% trans "Pool path:" %}</p> - <p>{% trans "Pool status:" %}</p> - <p>{% trans "Size:" %} ({{ size|filesizeformat }} / {{ used|filesizeformat }})</p> - <p>{% trans "State:" %}</p> - <p>{% trans "Autostart:" %}</p> - </div> - <div class="col-xs-6 col-sm-6"> - <p>{{ pool }}</p> - <p>{% if not type %}{% trans "None" %}{% else %}{{ type }}{% endif %}</p> - <p>{% if not path %}{% trans "None" %}{% else %}{{ path }}{% endif %}</p> - <p>{% if not status %}{% trans "None" %}{% else %}{{ status }}{% endif %}</p> - <p>{% trans "Usage:" %} {{ percent }}%</p> - <p> - <form action="" method="post" role="form">{% csrf_token %} - {% ifequal state 0 %} - <input type="submit" class="btn btn-xs btn-default" name="start" value="{% trans "Start" %}"> - <input type="submit" class="btn btn-xs btn-default" name="delete" value="{% trans "Delete" %}" - onclick="return confirm('{% trans "Are you sure?" %}')"> - {% else %} - <input type="submit" class="btn btn-xs btn-default" name="stop" value="{% trans "Stop" %}" - onclick="return confirm('{% trans "Are you sure?" %}')"> - {% endifequal %} - </form> - </p> - <p> - <form action="" method="post" role="form">{% csrf_token %} - {% ifequal autostart 0 %} - <input type="submit" class="btn btn-xs btn-default" name="set_autostart" - value="{% trans "Enable" %}"> - {% else %} - <input type="submit" class="btn btn-xs btn-default" name="unset_autostart" - onclick="return confirm('{% trans "Are you sure?" %}')" value="{% trans "Disable" %}"> - {% endifequal %} - </form> - </p> - </div> -</div> -<div class="row"> - <div class="col-lg-12"> - {% if state %} - <div class="row"> - <div class="pull-right"> - <input id="filter" class="form-control" type="text" placeholder="Search"> - </div> - <h3 class="page-header">{% trans "Volumes" %}</h3> - - </div> - {% if volumes %} - <div class="table-responsive"> - <table class="table table-striped sortable-theme-bootstrap" data-sortable> - <thead> - <tr> - <th style="width: 45px;">#</th> - <th>{% trans "Name" %}</th> - <th>{% trans "Allocated" %}</th> - <th>{% trans "Size" %}</th> - <th>{% trans "Format" %}</th> - <th data-sortable="false" colspan="2">{% trans "Action" %}</th> - </tr> - </thead> - <tbody class="searchable"> - {% for volume in volumes %} - <tr> - <td>{{ forloop.counter }}</td> - <td>{{ volume.name }}</td> - <td>{{ volume.allocation|filesizeformat }}</td> - <td>{{ volume.size|filesizeformat }}</td> - <td>{{ volume.type }}</td> - <td style="width:30px;"> - <!-- Modal Clone --> - <div class="modal fade" id="Clone{{ forloop.counter }}" tabindex="-1" role="dialog" - aria-labelledby="addHostLabel" aria-hidden="true"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h4 class="modal-title">{% trans "Clone image" %} <span class="text-danger">{{ volume.name }}</span></h4> - </div> - <form class="form-horizontal" method="post" role="form">{% csrf_token %} - <div class="modal-body"> - <div class="form-group"> - <label class="col-sm-3 control-label">{% trans "Name" %}</label> - <div class="col-sm-6"> - <input type="text" class="form-control" name="name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+"> - <input type="hidden" name="image" value="{{ volume.name }}"> - </div> - </div> - <div class="form-group" id="image_format"> - <label class="col-sm-3 control-label">{% trans "Convert" %}</label> - <div class="col-sm-6"> - <input class="volume-convert" type="checkbox" name="convert" value="true"> - </div> - </div> - <div class="form-group format-convert"> - <label class="col-sm-3 control-label">{% trans "Format" %}</label> - <div class="col-sm-6"> - <select name="format" class="form-control image-format"> - <option value="raw">{% trans "raw" %}</option> - <option value="qcow">{% trans "qcow" %}</option> - <option value="qcow2">{% trans "qcow2" %}</option> - </select> - </div> - </div> - <div class="form-group meta-prealloc" style="display: none;"> - <label class="col-sm-3 control-label">{% trans "Metadata" %}</label> - <div class="col-sm-6"> - <input type="checkbox" name="meta_prealloc" value="true"> - </div> - </div> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> - <button type="submit" class="btn btn-primary" name="cln_volume" onclick="showPleaseWaitDialog();">{% trans "Clone" %}</button> - </div> - </form> - </div> <!-- /.modal-content --> - </div> <!-- /.modal-dialog --> - </div> <!-- /.modal --> - {% ifnotequal volume.type "iso" %} - <a data-toggle="modal" href="#Clone{{ forloop.counter }}" class="btn btn-sm btn-default" title="{% trans "Clone" %}"><i class="fa fa-files-o"></i></a> - {% else %} - <a class="btn btn-sm btn-default disabled"><i class="fa fa-files-o"></i></a> - {% endifnotequal %} - </td> - <td style="width:30px;"> - <form action="" method="post" style="height:10px" role="form">{% csrf_token %} - <input type="hidden" name="volname" value="{{ volume.name }}"> - <button type="submit" class="btn btn-sm btn-default" name="del_volume" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> - <i class="fa fa-trash"></i> - </button> - </form> - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% else %} + <!-- Page Heading --> + <div class="row"> <div class="col-lg-12"> - <div class="alert alert-warning alert-dismissable"> - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> - <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Volumes" %} - </div> + {% include 'create_stg_vol_block.html' %} + <h1 class="page-header">{% trans "Storage:" %} {{ pool }}</h1> + <ol class="breadcrumb"> + <li class="active"> + <i class="fa fa-dashboard"></i> <a href="{% url 'overview' compute.id %}">{% trans "Overview" %}</a> + </li> + <li> + <i class="fa fa-server"></i> <a href="{% url 'instances' compute.id %}">{% trans "Instances" %}</a> + </li> + <li> + <i class="fa fa-hdd-o"></i> <a href="{% url 'storages' compute.id %}">{% trans "Storages" %}</a> + </li> + <li> + <i class="fa fa-sitemap"></i> <a href="{% url 'networks' compute.id %}">{% trans "Networks" %}</a> + </li> + <li> + <i class="fa fa-wifi"></i> <a href="{% url 'interfaces' compute.id %}">{% trans "Interfaces" %}</a> + </li> + <li> + <i class="fa fa-filter"></i> <a href="{% url 'nwfilters' compute.id %}">{% trans "NWFilters" %}</a> + </li> + <li> + <i class="fa fa-key"></i> <a href="{% url 'secrets' compute.id %}">{% trans "Secrets" %}</a> + </li> + </ol> </div> - {% endif %} - {% endif %} </div> -</div> -{% include 'pleasewaitdialog.html' %} + <!-- /.row --> + + {% include 'errors_block.html' %} + {% include 'messages_block.html' %} + + <div class="row"> + <div class="col-xs-6 col-sm-6"> + <p>{% trans "Pool name" %}:</p> + <p>{% trans "Pool type" %}:</p> + <p>{% trans "Pool path" %}:</p> + <p>{% trans "Pool status" %}:</p> + <p>{% trans "Size" %}: ({{ size|filesizeformat }} / {{ used|filesizeformat }})</p> + <p>{% trans "State" %}:</p> + <p>{% trans "Autostart" %}:</p> + </div> + <div class="col-xs-6 col-sm-6"> + <p>{{ pool }}</p> + <p>{% if not type %}{% trans "None" %}{% else %}{{ type }}{% endif %}</p> + <p>{% if not path %}{% trans "None" %}{% else %}{{ path }}{% endif %}</p> + <p>{% if not status %}{% trans "None" %}{% else %}{{ status }}{% endif %}</p> + <p>{% trans "Usage" %}: {{ percent }}%</p> + <p> + <form action="" method="post" role="form">{% csrf_token %} + {% ifequal state 0 %} + <input type="submit" class="btn btn-xs btn-default" name="start" value="{% trans "Start" %}"> + <input type="submit" class="btn btn-xs btn-default" name="delete" value="{% trans "Delete" %}" + onclick="return confirm('{% trans "Are you sure?" %}')"> + {% else %} + <input type="submit" class="btn btn-xs btn-default" name="stop" value="{% trans "Stop" %}" + onclick="return confirm('{% trans "Are you sure?" %}')"> + {% endifequal %} + </form> + </p> + <p> + <form action="" method="post" role="form">{% csrf_token %} + {% ifequal autostart 0 %} + <input type="submit" class="btn btn-xs btn-default" name="set_autostart" + value="{% trans "Enable" %}"> + {% else %} + <input type="submit" class="btn btn-xs btn-default" name="unset_autostart" + onclick="return confirm('{% trans "Are you sure?" %}')" value="{% trans "Disable" %}"> + {% endifequal %} + </form> + </p> + </div> + </div> + <div class="row"> + <div class="col-lg-12"> + {% if state %} + <div class="row"> + <div class="pull-right"> + <input id="filter" class="form-control" type="text" placeholder="Search"> + </div> + <h3 class="page-header">{% trans "Volumes" %}</h3> + + </div> + {% if volumes %} + <div class="table-responsive"> + <table class="table table-striped sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th style="width: 45px;">#</th> + <th>{% trans "Name" %}</th> + <th>{% trans "Allocated" %}</th> + <th>{% trans "Size" %}</th> + <th>{% trans "Format" %}</th> + <th data-sortable="false" colspan="2">{% trans "Action" %}</th> + </tr> + </thead> + <tbody class="searchable"> + {% for volume in volumes %} + <tr> + <td>{{ forloop.counter }}</td> + <td>{{ volume.name }}</td> + <td>{{ volume.allocation|filesizeformat }}</td> + <td>{{ volume.size|filesizeformat }}</td> + <td>{{ volume.type }}</td> + <td style="width:30px;"> + <!-- Modal Clone --> + <div class="modal fade" id="Clone{{ forloop.counter }}" tabindex="-1" role="dialog" + aria-labelledby="addHostLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">{% trans "Clone image" %} <span class="text-danger">{{ volume.name }}</span></h4> + </div> + <form class="form-horizontal" method="post" role="form">{% csrf_token %} + <div class="modal-body"> + <div class="form-group"> + <label class="col-sm-3 control-label">{% trans "Name" %}</label> + <div class="col-sm-6"> + <input type="text" class="form-control" name="name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+"> + <input type="hidden" name="image" value="{{ volume.name }}"> + </div> + </div> + <div class="form-group" id="image_format"> + <label class="col-sm-3 control-label">{% trans "Convert" %}</label> + <div class="col-sm-6"> + <input class="volume-convert" type="checkbox" name="convert" value="true"> + </div> + </div> + <div class="form-group format-convert"> + <label class="col-sm-3 control-label">{% trans "Format" %}</label> + <div class="col-sm-6"> + <select name="format" class="form-control image-format"> + <option value="raw">{% trans "raw" %}</option> + <option value="qcow">{% trans "qcow" %}</option> + <option value="qcow2">{% trans "qcow2" %}</option> + </select> + </div> + </div> + <div class="form-group meta-prealloc" style="display: none;"> + <label class="col-sm-3 control-label">{% trans "Metadata" %}</label> + <div class="col-sm-6"> + <input type="checkbox" name="meta_prealloc" value="true"> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> + <button type="submit" class="btn btn-primary" name="cln_volume" onclick="showPleaseWaitDialog();">{% trans "Clone" %}</button> + </div> + </form> + </div> <!-- /.modal-content --> + </div> <!-- /.modal-dialog --> + </div> <!-- /.modal --> + {% ifnotequal volume.type "iso" %} + <a data-toggle="modal" href="#Clone{{ forloop.counter }}" class="btn btn-sm btn-default" title="{% trans "Clone" %}"><i class="fa fa-files-o"></i></a> + {% else %} + <a class="btn btn-sm btn-default disabled"><i class="fa fa-files-o"></i></a> + {% endifnotequal %} + </td> + <td style="width:30px;"> + <form action="" method="post" style="height:10px" role="form">{% csrf_token %} + <input type="hidden" name="volname" value="{{ volume.name }}"> + <button type="submit" class="btn btn-sm btn-default" name="del_volume" title="{% trans "Delete" %}" onclick="return confirm('{% trans "Are you sure?" %}')"> + <i class="fa fa-trash"></i> + </button> + </form> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% else %} + <div class="col-lg-12"> + <div class="alert alert-warning alert-dismissable"> + <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> + <i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning" %}:</strong> {% trans "Hypervisor doesn't have any Volumes" %} + </div> + </div> + {% endif %} + {% endif %} + </div> + </div> + {% include 'pleasewaitdialog.html' %} {% endblock %} {% block script %} <script src="{% static "js/sortable.min.js" %}"></script>