mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-08 06:16:08 +01:00
bug fix to docker volume mapping
This commit is contained in:
@@ -570,7 +570,7 @@ def changeAdminPassword(request):
|
|||||||
firstName="Cyber", lastName="Panel", acl=acl, token=token)
|
firstName="Cyber", lastName="Panel", acl=acl, token=token)
|
||||||
admin.save()
|
admin.save()
|
||||||
|
|
||||||
vers = version(currentVersion="1.8", build=0)
|
vers = version(currentVersion="1.8", build=1)
|
||||||
vers.save()
|
vers.save()
|
||||||
|
|
||||||
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
||||||
|
|||||||
@@ -1005,6 +1005,8 @@ class ContainerManager(multi.Thread):
|
|||||||
|
|
||||||
volumes = {}
|
volumes = {}
|
||||||
for index, volume in volList.iteritems():
|
for index, volume in volList.iteritems():
|
||||||
|
if volume['src'] == '' or volume['dest'] == '':
|
||||||
|
continue
|
||||||
volumes[volume['src']] = {'bind': volume['dest'],
|
volumes[volume['src']] = {'bind': volume['dest'],
|
||||||
'mode': 'rw'}
|
'mode': 'rw'}
|
||||||
# Prepare data for recreate function
|
# Prepare data for recreate function
|
||||||
|
|||||||
@@ -569,12 +569,12 @@ app.controller('viewContainer', function ($scope, $http) {
|
|||||||
$('#actionLoading').hide();
|
$('#actionLoading').hide();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.addEnvField = function () {
|
$scope.addEnvField = function () {
|
||||||
var countEnv = Object.keys($scope.envList).length;
|
var countEnv = Object.keys($scope.envList).length;
|
||||||
$scope.envList[countEnv + 1] = {'name': '', 'value': ''};
|
$scope.envList[countEnv + 1] = {'name': '', 'value': ''};
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.showTop = function () {
|
$scope.showTop = function () {
|
||||||
$scope.topHead = [];
|
$scope.topHead = [];
|
||||||
@@ -615,7 +615,7 @@ app.controller('viewContainer', function ($scope, $http) {
|
|||||||
$scope.loadingTop = false;
|
$scope.loadingTop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.cRemove = function () {
|
$scope.cRemove = function () {
|
||||||
(new PNotify({
|
(new PNotify({
|
||||||
@@ -672,7 +672,7 @@ app.controller('viewContainer', function ($scope, $http) {
|
|||||||
$('#actionLoading').hide();
|
$('#actionLoading').hide();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.refreshStatus = function () {
|
$scope.refreshStatus = function () {
|
||||||
url = "/docker/getContainerStatus";
|
url = "/docker/getContainerStatus";
|
||||||
@@ -784,7 +784,7 @@ app.controller('viewContainer', function ($scope, $http) {
|
|||||||
$scope.rPolicy = "No";
|
$scope.rPolicy = "No";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.cAction = function (action) {
|
$scope.cAction = function (action) {
|
||||||
$('#actionLoading').show();
|
$('#actionLoading').show();
|
||||||
@@ -831,7 +831,7 @@ app.controller('viewContainer', function ($scope, $http) {
|
|||||||
$('#actionLoading').hide();
|
$('#actionLoading').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.loadLogs = function (name) {
|
$scope.loadLogs = function (name) {
|
||||||
$scope.logs = "Loading...";
|
$scope.logs = "Loading...";
|
||||||
@@ -865,7 +865,7 @@ app.controller('viewContainer', function ($scope, $http) {
|
|||||||
console.log("not good");
|
console.log("not good");
|
||||||
$scope.logs = "Error loading log";
|
$scope.logs = "Error loading log";
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,195 +3,209 @@
|
|||||||
{% block title %}{% trans "Run new container - CyberPanel" %}{% endblock %}
|
{% block title %}{% trans "Run new container - CyberPanel" %}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<div id="page-title">
|
|
||||||
<h2>{% trans "Run Container" %}</h2>
|
|
||||||
<p>{% trans "Modify parameters for your new container" %}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div ng-controller="runContainer" class="panel">
|
|
||||||
<div class="panel-body">
|
|
||||||
<h3 class="title-hero">
|
|
||||||
{% trans "Container Details" %} <img ng-hide="containerCreationLoading" src="{% static 'images/loading.gif' %}">
|
|
||||||
</h3>
|
|
||||||
<div class="example-box-wrapper">
|
|
||||||
|
|
||||||
|
|
||||||
<form name="dockerInstallForm" action="/" class="form-horizontal bordered-row">
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Name" %}</label>
|
|
||||||
<div class="col-sm-6" ng-init="name='{{name}}' ">
|
|
||||||
<input name="name" type="text" class="form-control" ng-model="name" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Image" %}</label>
|
|
||||||
<div class="col-sm-6" ng-init="image='{{image}}' ">
|
|
||||||
<input name="image" type="text" class="form-control" ng-model="image" required disabled="disabled">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Tag" %}</label>
|
|
||||||
<div class="col-sm-6" ng-init="tag='{{tag}}' ">
|
|
||||||
<input name="tag" type="text" class="form-control" ng-model="tag" required disabled="disabled">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Select Owner" %}</label>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<select ng-model="dockerOwner" class="form-control">
|
|
||||||
{% for items in ownerList %}
|
|
||||||
<option>{{ items }}</option>
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Memory limit" %}</label>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<input name="memory" type="number" class="form-control" ng-model="memory" required>
|
|
||||||
</div>
|
|
||||||
<div class="current-pack ng-binding">MB</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% for port, protocol in portConfig.items %}
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Port" %}</label>
|
|
||||||
<div class="col-sm-2" ng-init="iport[{{port}}]={{ port }} ">
|
|
||||||
<input name="iport[{{port}}]" type="text" class="form-control" ng-model="iport[{{port}}]" required disabled="disabled">
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-1" ng-init="portType['{{port}}']='{{ protocol }}'" >
|
|
||||||
<input name="portType['{{port}}']" type="text" class="form-control" ng-model="portType['{{port}}']" required disabled="disabled">
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-1 current-pack text-center">to</div>
|
|
||||||
<div class="col-sm-2">
|
|
||||||
<input name="eport['{{port}}']" type="number" class="form-control" ng-model="eport['{{port}}']" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<span ng-init="envList = {}"></span>
|
|
||||||
{% for env, value in envList.items %}
|
|
||||||
|
|
||||||
<span ng-init="envList[{{ forloop.counter0 }}] = {'name':'{{env}}' , 'value':'{{value}}'} "></span>
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
<hr>
|
|
||||||
<div ng-repeat="env in envList track by $index">
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">
|
|
||||||
<div ng-show="$first">
|
|
||||||
{% trans "ENV" %}
|
|
||||||
</div>
|
|
||||||
</label>
|
|
||||||
<div class="col-sm-2">
|
|
||||||
<input name="$index" type="text" class="form-control" ng-model="envList[$index].name" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<input name="$index" type="text" class="form-control" ng-model="envList[$index].value" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div ng-hide="installationDetailsForm" class="col-md-offset-3">
|
|
||||||
<button type="button" class="btn btn-info" ng-click="addEnvField()">Add more</button>
|
|
||||||
</div><br>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group text-center">
|
|
||||||
<label class="control-label">
|
|
||||||
{% trans "Map Volumes" %}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div ng-repeat="volume in volList track by $index">
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<div class="col-sm-3"></div>
|
|
||||||
<div class="col-sm-2">
|
|
||||||
<input type="text" class="form-control" ng-model="volList[$index].dest" placeholder="Destination" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<input type="text" class="form-control" ng-model="volList[$index].src" placeholder="Source" required>
|
|
||||||
</div>
|
|
||||||
<div ng-show="$last">
|
|
||||||
<div class="col-sm-1">
|
|
||||||
<button class="btn btn-primary" type="button" ng-click="removeVolField()"><i class="fa fa-times"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="text-center">
|
|
||||||
<button type="button" class="btn btn-info" ng-click="addVolField()">{% trans "Add field" %}</button>
|
|
||||||
</div><br>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label"></label>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<button type="button" ng-click="createContainer()" class="btn btn-primary btn-lg btn-block">{% trans "Create Container" %}</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div ng-hide="installationProgress" class="form-group">
|
|
||||||
<label class="col-sm-2 control-label"></label>
|
|
||||||
<div class="col-sm-7">
|
|
||||||
|
|
||||||
<div class="alert alert-success text-center">
|
|
||||||
<h2>{$ currentStatus $}</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="errorMessageBox" class="alert alert-danger">
|
|
||||||
<p>{% trans "Error message:" %} {$ errorMessage $}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="success" class="alert alert-success">
|
|
||||||
<p>{% trans "Container succesfully created." %}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div ng-hide="couldNotConnect" class="alert alert-danger">
|
|
||||||
<p>{% trans "Could not connect to server. Please refresh this page." %}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationProgress" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label"></label>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<button type="button" ng-disabled="goBackDisable" ng-click="goBack()" class="btn btn-primary btn-lg btn-block">{% trans "Go Back" %}</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div id="page-title">
|
||||||
|
<h2>{% trans "Run Container" %}</h2>
|
||||||
|
<p>{% trans "Modify parameters for your new container" %}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div ng-controller="runContainer" class="panel">
|
||||||
|
<div class="panel-body">
|
||||||
|
<h3 class="title-hero">
|
||||||
|
{% trans "Container Details" %} <img ng-hide="containerCreationLoading"
|
||||||
|
src="{% static 'images/loading.gif' %}">
|
||||||
|
</h3>
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
|
|
||||||
|
<form name="dockerInstallForm" action="/" class="form-horizontal bordered-row">
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Name" %}</label>
|
||||||
|
<div class="col-sm-6" ng-init="name='{{ name }}' ">
|
||||||
|
<input name="name" type="text" class="form-control" ng-model="name" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Image" %}</label>
|
||||||
|
<div class="col-sm-6" ng-init="image='{{ image }}' ">
|
||||||
|
<input name="image" type="text" class="form-control" ng-model="image" required
|
||||||
|
disabled="disabled">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Tag" %}</label>
|
||||||
|
<div class="col-sm-6" ng-init="tag='{{ tag }}' ">
|
||||||
|
<input name="tag" type="text" class="form-control" ng-model="tag" required
|
||||||
|
disabled="disabled">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Select Owner" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<select ng-model="dockerOwner" class="form-control">
|
||||||
|
{% for items in ownerList %}
|
||||||
|
<option>{{ items }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Memory limit" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input name="memory" type="number" class="form-control" ng-model="memory" required>
|
||||||
|
</div>
|
||||||
|
<div class="current-pack ng-binding">MB</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% for port, protocol in portConfig.items %}
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Port" %}</label>
|
||||||
|
<div class="col-sm-2" ng-init="iport[{{ port }}]={{ port }} ">
|
||||||
|
<input name="iport[{{ port }}]" type="text" class="form-control"
|
||||||
|
ng-model="iport[{{ port }}]" required disabled="disabled">
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-1" ng-init="portType['{{ port }}']='{{ protocol }}'">
|
||||||
|
<input name="portType['{{ port }}']" type="text" class="form-control"
|
||||||
|
ng-model="portType['{{ port }}']" required disabled="disabled">
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-1 current-pack text-center">to</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<input name="eport['{{ port }}']" type="number" class="form-control"
|
||||||
|
ng-model="eport['{{ port }}']" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<span ng-init="envList = {}"></span>
|
||||||
|
{% for env, value in envList.items %}
|
||||||
|
|
||||||
|
<span ng-init="envList[{{ forloop.counter0 }}] = {'name':'{{ env }}' , 'value':'{{ value }}'} "></span>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
<hr>
|
||||||
|
<div ng-repeat="env in envList track by $index">
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">
|
||||||
|
<div ng-show="$first">
|
||||||
|
{% trans "ENV" %}
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<input name="$index" type="text" class="form-control"
|
||||||
|
ng-model="envList[$index].name" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input name="$index" type="text" class="form-control"
|
||||||
|
ng-model="envList[$index].value" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div ng-hide="installationDetailsForm" class="col-md-offset-3">
|
||||||
|
<button type="button" class="btn btn-info" ng-click="addEnvField()">Add more</button>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group text-center">
|
||||||
|
<label class="control-label">
|
||||||
|
{% trans "Map Volumes" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div ng-repeat="volume in volList track by $index">
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<div class="col-sm-1"></div>
|
||||||
|
<div class="col-sm-5">
|
||||||
|
<input type="text" class="form-control" ng-model="volList[$index].dest"
|
||||||
|
placeholder="Destination" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-5">
|
||||||
|
<input type="text" class="form-control" ng-model="volList[$index].src"
|
||||||
|
placeholder="Source" required>
|
||||||
|
</div>
|
||||||
|
<div ng-show="$last">
|
||||||
|
<div class="col-sm-1">
|
||||||
|
<button class="btn btn-primary" type="button" ng-click="removeVolField()"><i
|
||||||
|
style="position: inherit; top: 0px; left: 0px" class="fa fa-times"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="text-center">
|
||||||
|
<button type="button" class="btn btn-info"
|
||||||
|
ng-click="addVolField()">{% trans "Add field" %}</button>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<button type="button" ng-click="createContainer()"
|
||||||
|
class="btn btn-primary btn-lg btn-block">{% trans "Create Container" %}</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div ng-hide="installationProgress" class="form-group">
|
||||||
|
<label class="col-sm-2 control-label"></label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
|
||||||
|
<div class="alert alert-success text-center">
|
||||||
|
<h2>{$ currentStatus $}</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="errorMessageBox" class="alert alert-danger">
|
||||||
|
<p>{% trans "Error message:" %} {$ errorMessage $}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="success" class="alert alert-success">
|
||||||
|
<p>{% trans "Container succesfully created." %}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div ng-hide="couldNotConnect" class="alert alert-danger">
|
||||||
|
<p>{% trans "Could not connect to server. Please refresh this page." %}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationProgress" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<button type="button" ng-disabled="goBackDisable" ng-click="goBack()"
|
||||||
|
class="btn btn-primary btn-lg btn-block">{% trans "Go Back" %}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -3,336 +3,374 @@
|
|||||||
{% block title %}{% trans "Container Home - CyberPanel" %}{% endblock %}
|
{% block title %}{% trans "Container Home - CyberPanel" %}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||||
|
|
||||||
|
|
||||||
<div class="container" ng-controller="viewContainer">
|
<div class="container" ng-controller="viewContainer">
|
||||||
|
|
||||||
<div id="page-title" ng-init="cName='{{name}}'">
|
<div id="page-title" ng-init="cName='{{ name }}'">
|
||||||
<h2 id="domainNamePage">{% trans "Manage Container" %}</h2>
|
<h2 id="domainNamePage">{% trans "Manage Container" %}</h2>
|
||||||
<p>{% trans "Currently managing: " %} {{ name }}</p>
|
<p>{% trans "Currently managing: " %} {{ name }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="example-box-wrapper">
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
<div class="panel panel-body">
|
<div class="panel panel-body">
|
||||||
|
|
||||||
<h3 class="content-box-header">
|
<h3 class="content-box-header">
|
||||||
{% trans "Container Information" %}
|
{% trans "Container Information" %}
|
||||||
<img id="infoLoading" src="/static/images/loading.gif" style="display: none;">
|
<img id="infoLoading" src="/static/images/loading.gif" style="display: none;">
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
|
|
||||||
<div class="content-box-wrapper">
|
<div class="content-box-wrapper">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<div class="panel-body">
|
|
||||||
<div class="example-box-wrapper">
|
|
||||||
<h3 class="title-hero">
|
|
||||||
{% trans "Memory Usage" %}
|
|
||||||
</h3>
|
|
||||||
<div class="progressbar" data-value="{{ memoryUsage }}">
|
|
||||||
<div class="progressbar-value bg-primary">
|
|
||||||
<div class="progress-overlay"></div>
|
|
||||||
<div class="progress-label">{{ memoryUsage | floatformat:"2" }}%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="title-hero">
|
|
||||||
{% trans "CPU Usage" %}
|
|
||||||
</h3>
|
|
||||||
<div class="progressbar" data-value="{{ cpuUsage }}">
|
|
||||||
<div class="progressbar-value bg-primary">
|
|
||||||
<div class="progress-overlay"></div>
|
|
||||||
<div class="progress-label">{{ cpuUsage }}%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="panel">
|
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="example-box-wrapper">
|
<div class="example-box-wrapper">
|
||||||
{% trans "Container ID" %}: {{cid}}
|
<h3 class="title-hero">
|
||||||
|
{% trans "Memory Usage" %}
|
||||||
|
</h3>
|
||||||
|
<div class="progressbar" data-value="{{ memoryUsage }}">
|
||||||
|
<div class="progressbar-value bg-primary">
|
||||||
|
<div class="progress-overlay"></div>
|
||||||
|
<div class="progress-label">{{ memoryUsage | floatformat:"2" }}%</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<h3 class="title-hero">
|
||||||
|
{% trans "CPU Usage" %}
|
||||||
|
</h3>
|
||||||
|
<div class="progressbar" data-value="{{ cpuUsage }}">
|
||||||
|
<div class="progressbar-value bg-primary">
|
||||||
|
<div class="progress-overlay"></div>
|
||||||
|
<div class="progress-label">{{ cpuUsage }}%</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
{% trans "Container ID" %}: {{ cid }}
|
||||||
<br>
|
<br>
|
||||||
{% trans "Image" %}: {{image}}
|
{% trans "Image" %}: {{ image }}
|
||||||
<span ng-show="'{{image}}' == 'unknown:unknown'" title="Actions involving container recreation cannot be executed">
|
<span ng-show="'{{ image }}' == 'unknown:unknown'"
|
||||||
|
title="Actions involving container recreation cannot be executed">
|
||||||
<i class="fa fa-warning btn-icon"></i>
|
<i class="fa fa-warning btn-icon"></i>
|
||||||
</span>
|
</span>
|
||||||
<br>
|
<br>
|
||||||
{% if ports %}
|
{% if ports %}
|
||||||
{% trans "Ports" %}: <br>
|
{% trans "Ports" %}: <br>
|
||||||
{% for iport, eport in ports.items %}
|
{% for iport, eport in ports.items %}
|
||||||
{{iport}} {% trans "to" %} {{eport}}<br>
|
{{ iport }} {% trans "to" %} {{ eport }}<br>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button class="btn btn-warning" data-toggle="modal" data-target="#settings"><i class="fa fa-gear btn-icon"></i> Settings</button>
|
<button class="btn btn-warning" data-toggle="modal" data-target="#settings"><i
|
||||||
<button class="btn btn-warning" ng-click="recreate()"><i class="fa fa-refresh btn-icon"></i> Recreate</button>
|
class="fa fa-gear btn-icon"></i> Settings
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-warning" ng-click="recreate()"><i
|
||||||
|
class="fa fa-refresh btn-icon"></i> Recreate
|
||||||
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="example-box-wrapper">
|
|
||||||
|
|
||||||
<div class="panel panel-body">
|
|
||||||
|
|
||||||
<h3 class="content-box-header">
|
|
||||||
{% trans "Actions" %}
|
|
||||||
</h3>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="content-box-wrapper">
|
|
||||||
<div class="row">
|
|
||||||
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="panel">
|
|
||||||
<div class="panel-body">
|
|
||||||
<div class="example-box-wrapper">
|
|
||||||
<h3 class="title-hero" ng-init="status='{{status}}'">Main Actions
|
|
||||||
<img id="actionLoading" src="/static/images/loading.gif" style="display: none;width: 20px;">
|
|
||||||
</h3>
|
|
||||||
<b>Status:</b> <span ng-bind="status"></span>
|
|
||||||
<span ng-click='refreshStatus()' style="cursor:pointer;" class="pull-right" title="Refresh status"><i class="fa fa-refresh btn-icon"></i></span>
|
|
||||||
<hr>
|
|
||||||
<button ng-disabled="status=='running'" class="btn btn-primary" ng-click="cAction('start')"><i class="fa fa-play btn-icon"></i> Start</button>
|
|
||||||
<button ng-disabled="status!='running'" class="btn btn-primary" ng-click="cAction('restart')"><i class="fa fa-refresh btn-icon"></i> Restart</button>
|
|
||||||
<button ng-disabled="status!='running'" class="btn btn-primary" ng-click="cAction('stop')"><i class="fa fa-stop btn-icon"></i> Stop</button>
|
|
||||||
<button class="btn btn-primary" ng-click="cRemove()">Remove</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-6">
|
</div>
|
||||||
<div class="panel">
|
</div>
|
||||||
<div class="panel-body">
|
|
||||||
<div class="example-box-wrapper">
|
|
||||||
<h3 class="title-hero" ng-init="rPolicy='{{restartPolicy}}'">Other Actions</h3>
|
</div>
|
||||||
<b>Restart on system reboot:</b> <span ng-bind="rPolicy"></span><hr>
|
</div>
|
||||||
<a href="/docker/exportContainer/?name={{name}}" class="btn btn-primary">Export file</a>
|
|
||||||
<button class="btn btn-primary" ng-disabled="loadingTop" ng-click="showTop()">View Process</button>
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
|
<div class="panel panel-body">
|
||||||
|
|
||||||
|
<h3 class="content-box-header">
|
||||||
|
{% trans "Actions" %}
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content-box-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
<h3 class="title-hero" ng-init="status='{{ status }}'">Main Actions
|
||||||
|
<img id="actionLoading" src="/static/images/loading.gif"
|
||||||
|
style="display: none;width: 20px;">
|
||||||
|
</h3>
|
||||||
|
<b>Status:</b> <span ng-bind="status"></span>
|
||||||
|
<span ng-click='refreshStatus()' style="cursor:pointer;" class="pull-right"
|
||||||
|
title="Refresh status"><i class="fa fa-refresh btn-icon"></i></span>
|
||||||
|
<hr>
|
||||||
|
<button ng-disabled="status=='running'" class="btn btn-primary"
|
||||||
|
ng-click="cAction('start')"><i class="fa fa-play btn-icon"></i> Start
|
||||||
|
</button>
|
||||||
|
<button ng-disabled="status!='running'" class="btn btn-primary"
|
||||||
|
ng-click="cAction('restart')"><i class="fa fa-refresh btn-icon"></i>
|
||||||
|
Restart
|
||||||
|
</button>
|
||||||
|
<button ng-disabled="status!='running'" class="btn btn-primary"
|
||||||
|
ng-click="cAction('stop')"><i class="fa fa-stop btn-icon"></i> Stop
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-primary" ng-click="cRemove()">Remove</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<div class="col-md-6">
|
||||||
|
<div class="panel">
|
||||||
</div>
|
<div class="panel-body">
|
||||||
</div>
|
<div class="example-box-wrapper">
|
||||||
|
<h3 class="title-hero" ng-init="rPolicy='{{ restartPolicy }}'">Other
|
||||||
|
Actions</h3>
|
||||||
</div>
|
<b>Restart on system reboot:</b> <span ng-bind="rPolicy"></span>
|
||||||
|
<hr>
|
||||||
<div class="example-box-wrapper">
|
<a href="/docker/exportContainer/?name={{ name }}" class="btn btn-primary">Export
|
||||||
|
file</a>
|
||||||
<div class="content-box panel-body">
|
<button class="btn btn-primary" ng-disabled="loadingTop" ng-click="showTop()">
|
||||||
|
View Process
|
||||||
<h3 class="content-box-header" ng-init="loadLogs('{{name}}')">
|
</button>
|
||||||
{% trans "Logs" %}
|
</div>
|
||||||
<span style="cursor:pointer;" class="pull-right" ng-click="loadLogs('{{name}}')"><i class="fa fa-refresh btn-icon"></i></span>
|
</div>
|
||||||
</h3>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="content-box-wrapper">
|
|
||||||
<div class="row">
|
|
||||||
|
|
||||||
<textarea name="logs" class="form-control" id="" cols="30" rows="10">{$ logs $}</textarea><br>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="settings" class="modal fade" role="dialog">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
|
|
||||||
<!-- Modal content-->
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
|
||||||
<h4 class="modal-title">Container Settings
|
|
||||||
<img id="containerSettingLoading" src="/static/images/loading.gif" style="display: none;">
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
|
|
||||||
<form name="containerSettingsForm" action="/" class="form-horizontal">
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">{% trans "Memory limit" %}</label>
|
|
||||||
<div class="col-sm-6" ng-init="memory={{memoryLimit}}">
|
|
||||||
<input name="memory" type="number" class="form-control" ng-model="memory" required>
|
|
||||||
</div>
|
|
||||||
<div class="current-pack ng-binding">MB</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">Start on reboot</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<div class="checkbox" ng-init="startOnReboot={{startOnReboot}}">
|
|
||||||
<label>
|
|
||||||
<input ng-model="startOnReboot" type="checkbox" value="" class="ng-pristine ng-untouched ng-valid ng-empty">
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
|
<div class="content-box panel-body">
|
||||||
|
|
||||||
|
<h3 class="content-box-header" ng-init="loadLogs('{{ name }}')">
|
||||||
|
{% trans "Logs" %}
|
||||||
|
<span style="cursor:pointer;" class="pull-right" ng-click="loadLogs('{{ name }}')"><i
|
||||||
|
class="fa fa-refresh btn-icon"></i></span>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content-box-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<textarea name="logs" class="form-control" id="" cols="30" rows="10">{$ logs $}</textarea><br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="settings" class="modal fade" role="dialog">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
|
||||||
|
<!-- Modal content-->
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||||
|
<h4 class="modal-title">Container Settings
|
||||||
|
<img id="containerSettingLoading" src="/static/images/loading.gif" style="display: none;">
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<form name="containerSettingsForm" action="/" class="form-horizontal">
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Memory limit" %}</label>
|
||||||
|
<div class="col-sm-6" ng-init="memory={{ memoryLimit }}">
|
||||||
|
<input name="memory" type="number" class="form-control" ng-model="memory" required>
|
||||||
|
</div>
|
||||||
|
<div class="current-pack ng-binding">MB</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">Start on reboot</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox" ng-init="startOnReboot={{ startOnReboot }}">
|
||||||
|
<label>
|
||||||
|
<input ng-model="startOnReboot" type="checkbox" value=""
|
||||||
|
class="ng-pristine ng-untouched ng-valid ng-empty">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Confirmation" %}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="envConfirmation" type="checkbox">
|
||||||
|
Editing ENV or Volume will recreate container.
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<span ng-init="envList = {}"></span>
|
||||||
|
{% for env, value in envList.items %}
|
||||||
|
|
||||||
|
<span ng-init="envList[{{ forloop.counter0 }}] = {'name':'{{ env }}' , 'value':'{{ value }}'} "></span>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<div ng-repeat="env in envList track by $index">
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">
|
||||||
|
<div ng-show="$first">
|
||||||
|
{% trans "ENV" %}
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<input name="$index" ng-disabled="!envConfirmation" type="text"
|
||||||
|
class="form-control" ng-model="envList[$index].name" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input name="$index" ng-disabled="!envConfirmation" type="text"
|
||||||
|
class="form-control" ng-model="envList[$index].value" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-offset-3">
|
||||||
|
<button type="button" ng-disabled="!envConfirmation" class="btn btn-info"
|
||||||
|
ng-click="addEnvField()">Add more
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<span ng-init="volList = {}"></span>
|
||||||
|
<span ng-init="volListNumber=1"></span>
|
||||||
|
{% for key, value in volList.items %}
|
||||||
|
<span ng-init="volList[{{ forloop.counter0 }}] = {'dest':'{{ value.bind }}' , 'src':'{{ key }}'}"></span>
|
||||||
|
<span ng-init="volListNumber={{ forloop.counter0 }} + 1"></span>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group text-center">
|
||||||
|
<label class="control-label">
|
||||||
|
{% trans "Map Volumes" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div ng-repeat="volume in volList track by $index">
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<div class="col-sm-5">
|
||||||
|
<input type="text" ng-disabled="!envConfirmation" class="form-control"
|
||||||
|
ng-model="volList[$index].dest" placeholder="Destination" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-5">
|
||||||
|
<input type="text" ng-disabled="!envConfirmation" class="form-control"
|
||||||
|
ng-model="volList[$index].src" placeholder="Source" required>
|
||||||
|
</div>
|
||||||
|
<div ng-show="$last">
|
||||||
|
<div class="col-sm-1">
|
||||||
|
<button class="btn btn-primary" ng-disabled="!envConfirmation" type="button"
|
||||||
|
ng-click="removeVolField()"><i
|
||||||
|
style="position: inherit; top: 0px; left: 0px"
|
||||||
|
class="fa fa-times"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="text-center">
|
||||||
|
<button type="button" ng-disabled="!envConfirmation" class="btn btn-info"
|
||||||
|
ng-click="addVolField()">{% trans "Add field" %}</button>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" ng-disabled="savingSettings" class="btn btn-primary"
|
||||||
|
ng-click="saveSettings()">Save
|
||||||
|
</button>
|
||||||
|
<button type="button" ng-disabled="savingSettings" class="btn btn-default" data-dismiss="modal">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<hr>
|
<div id="processes" class="modal fade" role="dialog">
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
<div class="modal-dialog" style="width: 96%;">
|
||||||
<label class="col-sm-3 control-label">{% trans "Confirmation" %}</label>
|
|
||||||
<div class="col-sm-9">
|
<!-- Modal content-->
|
||||||
<div class="checkbox">
|
<div class="modal-content panel-body">
|
||||||
<label>
|
<div class="modal-header">
|
||||||
<input ng-model="envConfirmation" type="checkbox">
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||||
Editing ENV or Volume will recreate container.
|
<h4 class="modal-title content-box=header">Container Processes</h4>
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="modal-body">
|
||||||
<hr>
|
|
||||||
<span ng-init="envList = {}"></span>
|
|
||||||
{% for env, value in envList.items %}
|
|
||||||
|
|
||||||
<span ng-init="envList[{{ forloop.counter0 }}] = {'name':'{{env}}' , 'value':'{{value}}'} "></span>
|
<table cellpadding="0" cellspacing="0" border="0" class="table table-striped"
|
||||||
|
id="datatable-example">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th ng-repeat="item in topHead track by $index">{$ item $}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
|
||||||
{% endfor %}
|
<tr ng-repeat="process in topProcesses track by $index">
|
||||||
|
<th ng-repeat="item in process track by $index">{$ item $}</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<div ng-repeat="env in envList track by $index">
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">
|
|
||||||
<div ng-show="$first">
|
|
||||||
{% trans "ENV" %}
|
|
||||||
</div>
|
|
||||||
</label>
|
|
||||||
<div class="col-sm-2">
|
|
||||||
<input name="$index" ng-disabled="!envConfirmation" type="text" class="form-control" ng-model="envList[$index].name" required>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4">
|
<div class="modal-footer">
|
||||||
<input name="$index" ng-disabled="!envConfirmation" type="text" class="form-control" ng-model="envList[$index].value" required>
|
<button type="button" ng-disabled="savingSettings" class="btn btn-primary" ng-click="showTop()">
|
||||||
|
Refresh
|
||||||
|
</button>
|
||||||
|
<button type="button" ng-disabled="savingSettings" class="btn btn-default" data-dismiss="modal">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col-md-offset-3">
|
|
||||||
<button type="button" ng-disabled="!envConfirmation" class="btn btn-info" ng-click="addEnvField()">Add more</button>
|
|
||||||
</div><br>
|
|
||||||
|
|
||||||
<span ng-init="volList = {}"></span>
|
|
||||||
{% for key, value in volList.items %}
|
|
||||||
|
|
||||||
<span ng-init="volList[{{ forloop.counter0 }}] = {'dest':'{{value.bind}}' , 'src':'{{key}}'}"></span>
|
|
||||||
<span ng-init="volListNumber={{ forloop.counter0 }} + 1"></span>
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group text-center">
|
|
||||||
<label class="control-label">
|
|
||||||
{% trans "Map Volumes" %}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div ng-repeat="volume in volList track by $index">
|
|
||||||
<div ng-hide="installationDetailsForm" class="form-group">
|
|
||||||
<div class="col-sm-3"></div>
|
|
||||||
<div class="col-sm-2">
|
|
||||||
<input type="text" ng-disabled="!envConfirmation" class="form-control" ng-model="volList[$index].dest" placeholder="Destination" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<input type="text" ng-disabled="!envConfirmation" class="form-control" ng-model="volList[$index].src" placeholder="Source" required>
|
|
||||||
</div>
|
|
||||||
<div ng-show="$last">
|
|
||||||
<div class="col-sm-1">
|
|
||||||
<button class="btn btn-primary" ng-disabled="!envConfirmation" type="button" ng-click="removeVolField()"><i class="fa fa-times"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="installationDetailsForm" class="text-center">
|
|
||||||
<button type="button" ng-disabled="!envConfirmation" class="btn btn-info" ng-click="addVolField()">{% trans "Add field" %}</button>
|
|
||||||
</div><br>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" ng-disabled="savingSettings" class="btn btn-primary" ng-click="saveSettings()">Save</button>
|
|
||||||
<button type="button" ng-disabled="savingSettings" class="btn btn-default" data-dismiss="modal">Close</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="processes" class="modal fade" role="dialog">
|
|
||||||
<div class="modal-dialog" style="width: 96%;">
|
|
||||||
|
|
||||||
<!-- Modal content-->
|
|
||||||
<div class="modal-content panel-body">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
|
||||||
<h4 class="modal-title content-box=header">Container Processes</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
|
|
||||||
<table cellpadding="0" cellspacing="0" border="0" class="table table-striped" id="datatable-example">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th ng-repeat="item in topHead track by $index">{$ item $}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
<tr ng-repeat="process in topProcesses track by $index">
|
|
||||||
<th ng-repeat="item in process track by $index">{$ item $}</th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" ng-disabled="savingSettings" class="btn btn-primary" ng-click="showTop()">Refresh</button>
|
|
||||||
<button type="button" ng-disabled="savingSettings" class="btn btn-default" data-dismiss="modal">Close</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ def loadLoginPage(request):
|
|||||||
firstName="Cyber",lastName="Panel", acl=acl, token=token)
|
firstName="Cyber",lastName="Panel", acl=acl, token=token)
|
||||||
admin.save()
|
admin.save()
|
||||||
|
|
||||||
vers = version(currentVersion="1.8", build=0)
|
vers = version(currentVersion="1.8", build=1)
|
||||||
vers.save()
|
vers.save()
|
||||||
|
|
||||||
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
||||||
|
|||||||
@@ -47,14 +47,12 @@
|
|||||||
<ul class="list-group row">
|
<ul class="list-group row">
|
||||||
<li class="col-md-3">
|
<li class="col-md-3">
|
||||||
<a href="" ng-click="setProvider('github')" class="list-group-item">
|
<a href="" ng-click="setProvider('github')" class="list-group-item">
|
||||||
<i class="fa fa-github" aria-hidden="true"></i>
|
|
||||||
Github
|
Github
|
||||||
<i class="glyph-icon icon-chevron-right"></i>
|
<i class="glyph-icon icon-chevron-right"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="col-md-3">
|
<li class="col-md-3">
|
||||||
<a href="" ng-click="setProvider('gitlab')" class="list-group-item">
|
<a href="" ng-click="setProvider('gitlab')" class="list-group-item">
|
||||||
<i class="fa fa-gitlab" aria-hidden="true"></i>
|
|
||||||
GitLab
|
GitLab
|
||||||
<i class="glyph-icon font-green icon-chevron-right"></i>
|
<i class="glyph-icon font-green icon-chevron-right"></i>
|
||||||
</a>
|
</a>
|
||||||
@@ -205,13 +203,13 @@
|
|||||||
|
|
||||||
<li class="col-md-3 active">
|
<li class="col-md-3 active">
|
||||||
<a href="#tab-example-1" data-toggle="tab" class="list-group-item">
|
<a href="#tab-example-1" data-toggle="tab" class="list-group-item">
|
||||||
<i class="fa fa-git" aria-hidden="true"></i>
|
<i style="top: 11px" class="fa fa-git" aria-hidden="true"></i>
|
||||||
{% trans 'Manage' %}
|
{% trans 'Manage' %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="col-md-3">
|
<li class="col-md-3">
|
||||||
<a href="#tab-example-3" data-toggle="tab" class="list-group-item">
|
<a href="#tab-example-3" data-toggle="tab" class="list-group-item">
|
||||||
<i class="fa fa-tree" aria-hidden="true"></i>
|
<i style="top: 11px" class="fa fa-tree" aria-hidden="true"></i>
|
||||||
{% trans 'Change Branch' %}
|
{% trans 'Change Branch' %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -221,7 +219,6 @@
|
|||||||
<ul class="list-group row">
|
<ul class="list-group row">
|
||||||
<li class="col-md-3">
|
<li class="col-md-3">
|
||||||
<a href="" ng-click="detachRepo()" class="list-group-item">
|
<a href="" ng-click="detachRepo()" class="list-group-item">
|
||||||
<i class="fa fa-github" aria-hidden="true"></i>
|
|
||||||
{% trans 'Detach Repo' %}
|
{% trans 'Detach Repo' %}
|
||||||
<i class="glyph-icon icon-chevron-right"></i>
|
<i class="glyph-icon icon-chevron-right"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user