merge docker volume code changes

This commit is contained in:
usmannasir
2019-01-27 01:18:49 +05:00
parent 6c4ccc1bff
commit 23979ebc26
29 changed files with 1615 additions and 234 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
*.pyc *.pyc
containerization

View File

@@ -65,7 +65,8 @@ INSTALLED_APPS = [
'cloudAPI', 'cloudAPI',
'highAvailability', 'highAvailability',
's3Backups', 's3Backups',
'dockerManager' 'dockerManager',
'containerization'
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@@ -41,4 +41,5 @@ urlpatterns = [
url(r'^emailMarketing/', include('emailMarketing.urls')), url(r'^emailMarketing/', include('emailMarketing.urls')),
url(r'^cloudAPI/', include('cloudAPI.urls')), url(r'^cloudAPI/', include('cloudAPI.urls')),
url(r'^docker/', include('dockerManager.urls')), url(r'^docker/', include('dockerManager.urls')),
url(r'^container/', include('containerization.urls')),
] ]

View File

@@ -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.7", build=7) vers = version(currentVersion="1.8", build=0)
vers.save() vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000, package = Package(admin=admin, packageName="Default", diskSpace=1000,

View File

@@ -96,6 +96,7 @@
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"> href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<link rel="stylesheet" type="text/css" href="{% static 'baseTemplate/custom-js/pnotify.custom.min.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'baseTemplate/custom-js/pnotify.custom.min.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'websiteFunctions/websiteFunctions.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'websiteFunctions/websiteFunctions.css' %}">
<link rel="stylesheet" type="text/css" href="https://www.jsdelivr.com/package/npm/fontawesome">
<!-- Components theme, component below was above three CSS files. --> <!-- Components theme, component below was above three CSS files. -->
@@ -115,6 +116,8 @@
}, 300); }, 300);
}); });
</script> </script>
<script src="https://cdn.jsdelivr.net/npm/flot-charts@0.8.3/jquery.flot.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.flot@0.8.3/jquery.flot.time.js"></script>
<!-- JS Ends --> <!-- JS Ends -->
@@ -608,6 +611,24 @@
<li class="header serverACL"><span>{% trans "Server" %}</span></li> <li class="header serverACL"><span>{% trans "Server" %}</span></li>
<li class="serverACL">
<a href="#" title="{% trans 'Containerization' %}">
<i class="glyph-icon icon-linecons-fire"></i>
<span>{% trans "Containerization" %}</span>
<span class="bs-label badge-yellow">{% trans "NEW" %}</span>
</a>
<div class="sidebar-submenu">
<ul>
<li><a href="{% url 'cHome' %}"
title="{% trans 'Create Website Limits' %}"><span>{% trans "Create Limits" %}</span></a>
</li>
</ul>
</div><!-- .sidebar-submenu -->
</li>
<li class="serverACL"> <li class="serverACL">
<a href="#" title="{% trans 'Docker' %}"> <a href="#" title="{% trans 'Docker' %}">
<i class="glyph-icon icon-linecons-fire"></i> <i class="glyph-icon icon-linecons-fire"></i>
@@ -886,6 +907,7 @@
<script src="{% static 'manageSSL/manageSSL.js' %}"></script> <script src="{% static 'manageSSL/manageSSL.js' %}"></script>
<script src="{% static 'manageServices/manageServices.js' %}"></script> <script src="{% static 'manageServices/manageServices.js' %}"></script>
<script src="{% static 'dockerManager/dockerManager.js' %}"></script> <script src="{% static 'dockerManager/dockerManager.js' %}"></script>
<script src="{% static 'containerization/containerization.js' %}"></script>
</div> </div>
</body> </body>
</html> </html>

View File

@@ -11,7 +11,6 @@ urlpatterns = [
#url(r'^upgrade',views.upgrade, name='upgrade'), #url(r'^upgrade',views.upgrade, name='upgrade'),
url(r'^UpgradeStatus',views.upgradeStatus, name='UpgradeStatus'), url(r'^UpgradeStatus',views.upgradeStatus, name='UpgradeStatus'),
url(r'^upgradeVersion',views.upgradeVersion, name='upgradeVersion'), url(r'^upgradeVersion',views.upgradeVersion, name='upgradeVersion'),

View File

@@ -4,6 +4,7 @@ from __future__ import unicode_literals
from cloudManager import CloudManager from cloudManager import CloudManager
import json import json
from loginSystem.models import Administrator from loginSystem.models import Administrator
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
def router(request): def router(request):
try: try:
@@ -13,6 +14,7 @@ def router(request):
serverUserName = data['serverUserName'] serverUserName = data['serverUserName']
admin = Administrator.objects.get(userName=serverUserName) admin = Administrator.objects.get(userName=serverUserName)
cm = CloudManager(data, admin) cm = CloudManager(data, admin)
if controller == 'statusFunc': if controller == 'statusFunc':

1120
dockerManager/container.py Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@ import docker
import json import json
from django.http import HttpResponse from django.http import HttpResponse
from loginSystem.views import loadLoginPage from loginSystem.views import loadLoginPage
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
def preDockerRun(function): def preDockerRun(function):
def wrap(request, *args, **kwargs): def wrap(request, *args, **kwargs):
@@ -36,7 +37,8 @@ def preDockerRun(function):
try: try:
client = docker.from_env() client = docker.from_env()
client.ping() client.ping()
except: except BaseException, msg:
logging.writeToFile(str(msg))
if isPost: if isPost:
data_ret = {'status': 0, 'error_message': 'Docker daemon not running or not responsive'} data_ret = {'status': 0, 'error_message': 'Docker daemon not running or not responsive'}
json_data = json.dumps(data_ret) json_data = json.dumps(data_ret)
@@ -45,4 +47,5 @@ def preDockerRun(function):
return render(request, 'dockerManager/install.html', {'status':admin.type, 'conErr':1}) return render(request, 'dockerManager/install.html', {'status':admin.type, 'conErr':1})
return function(request, *args, **kwargs) return function(request, *args, **kwargs)
return wrap return wrap

View File

@@ -13,5 +13,6 @@ class Containers(models.Model):
tag = models.CharField(max_length=50, default='unknown') tag = models.CharField(max_length=50, default='unknown')
memory = models.IntegerField(default=0) memory = models.IntegerField(default=0)
ports = models.TextField(default="{}") ports = models.TextField(default="{}")
volumes = models.TextField(default="{}")
env = models.TextField(default="{}") env = models.TextField(default="{}")
startOnReboot = models.IntegerField(default=0) startOnReboot = models.IntegerField(default=0)

View File

@@ -1,5 +1,3 @@
app.controller('installDocker', function ($scope, $http, $timeout, $window) { app.controller('installDocker', function ($scope, $http, $timeout, $window) {
$scope.installDockerStatus = true; $scope.installDockerStatus = true;
$scope.installBoxGen = true; $scope.installBoxGen = true;
@@ -120,18 +118,27 @@ app.controller('runContainer', function ($scope, $http) {
$scope.couldNotConnect = true; $scope.couldNotConnect = true;
$scope.goBackDisable = true; $scope.goBackDisable = true;
$scope.volList = {};
$scope.volListNumber = 0;
$scope.addVolField = function () {
$scope.volList[$scope.volListNumber] = {'dest': '', 'src': ''};
$scope.volListNumber = $scope.volListNumber + 1;
console.log($scope.volList)
};
$scope.removeVolField = function () {
delete $scope.volList[$scope.volListNumber - 1];
$scope.volListNumber = $scope.volListNumber - 1;
};
$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': ''};
} };
var statusFile; var statusFile;
$scope.createContainer = function () { $scope.createContainer = function () {
console.log($scope.iport);
console.log($scope.portType);
$scope.containerCreationLoading = true; $scope.containerCreationLoading = true;
$scope.installationDetailsForm = true; $scope.installationDetailsForm = true;
$scope.installationProgress = false; $scope.installationProgress = false;
@@ -157,7 +164,8 @@ app.controller('runContainer', function ($scope, $http) {
memory: memory, memory: memory,
dockerOwner: dockerOwner, dockerOwner: dockerOwner,
image: image, image: image,
envList: $scope.envList envList: $scope.envList,
volList: $scope.volList
}; };
@@ -165,8 +173,6 @@ app.controller('runContainer', function ($scope, $http) {
data[port + "/" + protocol] = $scope.eport[port]; data[port + "/" + protocol] = $scope.eport[port];
}); });
console.log(data)
var config = { var config = {
headers: { headers: {
'X-CSRFToken': getCookie('csrftoken') 'X-CSRFToken': getCookie('csrftoken')
@@ -314,7 +320,7 @@ app.controller('listContainers', function ($scope, $http) {
if (response.data.delContainerStatus === 1) { if (response.data.delContainerStatus === 1) {
location.reload(); location.reload();
} }
else if (response.data.delContainerStatus == 2) { else if (response.data.delContainerStatus === 2) {
(new PNotify({ (new PNotify({
title: response.data.error_message, title: response.data.error_message,
text: 'Delete anyway?', text: 'Delete anyway?',
@@ -382,7 +388,6 @@ app.controller('listContainers', function ($scope, $http) {
else { else {
name = $scope.activeLog; name = $scope.activeLog;
} }
console.log(name)
$scope.logs = "Loading..."; $scope.logs = "Loading...";
url = "/docker/getContainerLogs"; url = "/docker/getContainerLogs";
@@ -420,7 +425,7 @@ app.controller('listContainers', function ($scope, $http) {
type: 'error' type: 'error'
}); });
} }
} };
url = "/docker/getContainerList"; url = "/docker/getContainerList";
@@ -697,7 +702,16 @@ app.controller('viewContainer', function ($scope, $http) {
}); });
} }
} };
$scope.addVolField = function () {
$scope.volList[$scope.volListNumber] = {'dest': '', 'src': ''};
$scope.volListNumber = $scope.volListNumber + 1;
};
$scope.removeVolField = function () {
delete $scope.volList[$scope.volListNumber - 1];
$scope.volListNumber = $scope.volListNumber - 1;
};
$scope.saveSettings = function () { $scope.saveSettings = function () {
$('#containerSettingLoading').show(); $('#containerSettingLoading').show();
@@ -709,10 +723,11 @@ app.controller('viewContainer', function ($scope, $http) {
memory: $scope.memory, memory: $scope.memory,
startOnReboot: $scope.startOnReboot, startOnReboot: $scope.startOnReboot,
envConfirmation: $scope.envConfirmation, envConfirmation: $scope.envConfirmation,
envList: $scope.envList envList: $scope.envList,
volList: $scope.volList
}; };
console.log(data)
var config = { var config = {
headers: { headers: {
'X-CSRFToken': getCookie('csrftoken') 'X-CSRFToken': getCookie('csrftoken')

View File

@@ -107,11 +107,38 @@
</div> </div>
</div> </div>
<div ng-hide="installationDetailsForm" class="col-md-offset-3"> <div ng-hide="installationDetailsForm" class="col-md-offset-3">
<button type="button" class="btn btn-info" ng-click="addEnvField()">Add more</button> <button type="button" class="btn btn-info" ng-click="addEnvField()">Add more</button>
</div><br> </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"> <div ng-hide="installationDetailsForm" class="form-group">
<label class="col-sm-3 control-label"></label> <label class="col-sm-3 control-label"></label>
<div class="col-sm-4"> <div class="col-sm-4">

View File

@@ -210,12 +210,12 @@
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input ng-model="envConfirmation" type="checkbox"> <input ng-model="envConfirmation" type="checkbox">
Editing ENV will recreate container <i class="fa fa-warning" title="If you tick this checkbox, your container will be recreated with saved information. Data saved inside container will be deleted (Not avaialble for container created outside of cyberpanel)"></i> Editing ENV or Volume will recreate container <i class="fa fa-warning" title="If you tick this checkbox, your container will be recreated with saved information. Data saved inside container will be deleted (Not avaialble for container created outside of cyberpanel)"></i>
</label> </label>
</div> </div>
</div> </div>
</div> </div>
<hr>
<span ng-init="envList = {}"></span> <span ng-init="envList = {}"></span>
{% for env, value in envList.items %} {% for env, value in envList.items %}
@@ -245,6 +245,43 @@
<button type="button" class="btn btn-info" ng-click="addEnvField()">Add more</button> <button type="button" class="btn btn-info" ng-click="addEnvField()">Add more</button>
</div><br> </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" 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>
</form> </form>
</div> </div>

View File

@@ -4,7 +4,7 @@ from __future__ import unicode_literals
from django.shortcuts import render, redirect, HttpResponse from django.shortcuts import render, redirect, HttpResponse
from loginSystem.models import Administrator from loginSystem.models import Administrator
from loginSystem.views import loadLoginPage from loginSystem.views import loadLoginPage
from plogical.container import ContainerManager from .container import ContainerManager
from decorators import preDockerRun from decorators import preDockerRun
from plogical.acl import ACLManager from plogical.acl import ACLManager
import json import json

View File

@@ -780,7 +780,7 @@ class preFlightsChecks:
os.chdir(self.path) os.chdir(self.path)
command = "wget http://cyberpanel.sh/CyberPanel.1.7.7.tar.gz" command = "wget http://cyberpanel.sh/CyberPanel.1.8.0.tar.gz"
#command = "wget http://cyberpanel.sh/CyberPanelTemp.tar.gz" #command = "wget http://cyberpanel.sh/CyberPanelTemp.tar.gz"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]', preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'CyberPanel Download', 'CyberPanel Download',
@@ -789,7 +789,7 @@ class preFlightsChecks:
## ##
count = 0 count = 0
command = "tar zxf CyberPanel.1.7.7.tar.gz" command = "tar zxf CyberPanel.1.8.0.tar.gz"
#command = "tar zxf CyberPanelTemp.tar.gz" #command = "tar zxf CyberPanelTemp.tar.gz"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]', preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'Extract CyberPanel',1, 1, os.EX_OSERR) 'Extract CyberPanel',1, 1, os.EX_OSERR)

View File

@@ -1361,4 +1361,3 @@ EOF
fi fi
} }

View File

@@ -503,4 +503,3 @@ fi
finish finish

Binary file not shown.

View File

@@ -67,7 +67,7 @@
<div class="col-md-8 col-lg-6 clearfix center-margin"> <div class="col-md-8 col-lg-6 clearfix center-margin">
<div class="row"> <div class="row">
<div class="col-md-5"> <div class="col-md-5">
<h3 class="text-transform-upr font-size-17">CyberPanel <span class="opacity-80">v 1.7</span></h3> <h3 class="text-transform-upr font-size-17">CyberPanel <span class="opacity-80">v 1.8</span></h3>
<p class="font-gray">Web Hosting Control Panel</p> <p class="font-gray">Web Hosting Control Panel</p>
<div class="divider"></div> <div class="divider"></div>
<ul class="reset-ul"> <ul class="reset-ul">

View File

@@ -156,7 +156,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.7", build=7) vers = version(currentVersion="1.8", build=0)
vers.save() vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000, package = Package(admin=admin, packageName="Default", diskSpace=1000,

View File

@@ -14,10 +14,12 @@ class httpProc:
return render(self.request, self.templateName) return render(self.request, self.templateName)
else: else:
return render(self.request, self.templateName, self.data) return render(self.request, self.templateName, self.data)
def ajaxPre(self, status, errorMessage, success = None): def ajaxPre(self, status, errorMessage, success = None):
final_dic = {'status': status, 'error_message': errorMessage, 'success': success} final_dic = {'status': status, 'error_message': errorMessage, 'success': success}
final_json = json.dumps(final_dic) final_json = json.dumps(final_dic)
return HttpResponse(final_json) return HttpResponse(final_json)
def ajax(self, status, errorMessage, data = None): def ajax(self, status, errorMessage, data = None):
if data == None: if data == None:
finalDic = {'status': status, 'error_message': errorMessage} finalDic = {'status': status, 'error_message': errorMessage}
@@ -34,3 +36,9 @@ class httpProc:
finalJson = json.dumps(finalDic) finalJson = json.dumps(finalDic)
return HttpResponse(finalJson) return HttpResponse(finalJson)
@staticmethod
def AJAX(status, errorMessage, success = None):
final_dic = {'status': status, 'error_message': errorMessage, 'success': success}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)

View File

@@ -114,5 +114,17 @@ class ProcessUtilities:
else: else:
return ProcessUtilities.centos return ProcessUtilities.centos
@staticmethod
def containerCheck():
try:
command = 'sudo cat /etc/cgrules.conf'
result = subprocess.call(shlex.split(command))
if result == 1:
return 0
else:
return 1
except BaseException:
return 0

View File

@@ -410,6 +410,77 @@ WantedBy=multi-user.target"""
CONSTRAINT `s3Backups_backuplogs_owner_id_c7cb5872_fk_s3Backups` FOREIGN KEY (`owner_id`) REFERENCES `s3Backups_backupplando` (`id`) CONSTRAINT `s3Backups_backuplogs_owner_id_c7cb5872_fk_s3Backups` FOREIGN KEY (`owner_id`) REFERENCES `s3Backups_backupplando` (`id`)
)""" )"""
try:
cursor.execute(query)
except:
pass
##
query = """CREATE TABLE `s3Backups_minionodes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`endPointURL` varchar(200) NOT NULL,
`accessKey` varchar(200) NOT NULL,
`secretKey` varchar(200) NOT NULL,
`owner_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `endPointURL` (`endPointURL`),
UNIQUE KEY `accessKey` (`accessKey`),
KEY `s3Backups_minionodes_owner_id_e50993d9_fk_loginSyst` (`owner_id`),
CONSTRAINT `s3Backups_minionodes_owner_id_e50993d9_fk_loginSyst` FOREIGN KEY (`owner_id`) REFERENCES `loginSystem_administrator` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
query = """CREATE TABLE `s3Backups_backupplanminio` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`freq` varchar(50) NOT NULL,
`retention` int(11) NOT NULL,
`lastRun` varchar(50) NOT NULL,
`minioNode_id` int(11) NOT NULL,
`owner_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `s3Backups_backupplan_minioNode_id_a4eaf917_fk_s3Backups` (`minioNode_id`),
KEY `s3Backups_backupplan_owner_id_d6830e67_fk_loginSyst` (`owner_id`),
CONSTRAINT `s3Backups_backupplan_minioNode_id_a4eaf917_fk_s3Backups` FOREIGN KEY (`minioNode_id`) REFERENCES `s3Backups_minionodes` (`id`),
CONSTRAINT `s3Backups_backupplan_owner_id_d6830e67_fk_loginSyst` FOREIGN KEY (`owner_id`) REFERENCES `loginSystem_administrator` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
query = """CREATE TABLE `s3Backups_websitesinplanminio` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`domain` varchar(100) NOT NULL,
`owner_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `s3Backups_websitesin_owner_id_224ce049_fk_s3Backups` (`owner_id`),
CONSTRAINT `s3Backups_websitesin_owner_id_224ce049_fk_s3Backups` FOREIGN KEY (`owner_id`) REFERENCES `s3Backups_backupplanminio` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
query = """CREATE TABLE `s3Backups_backuplogsminio` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`timeStamp` varchar(200) NOT NULL,
`level` varchar(5) NOT NULL,
`msg` varchar(500) NOT NULL,
`owner_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `s3Backups_backuplogs_owner_id_f19e1736_fk_s3Backups` (`owner_id`),
CONSTRAINT `s3Backups_backuplogs_owner_id_f19e1736_fk_s3Backups` FOREIGN KEY (`owner_id`) REFERENCES `s3Backups_backupplanminio` (`id`)
)"""
try: try:
cursor.execute(query) cursor.execute(query)
except: except:
@@ -633,6 +704,37 @@ WantedBy=multi-user.target"""
except: except:
pass pass
@staticmethod
def containerMigrations():
try:
connection, cursor = Upgrade.setupConnection('cyberpanel')
query = """CREATE TABLE `containerization_containerlimits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cpuPers` varchar(10) NOT NULL,
`IO` varchar(10) NOT NULL,
`IOPS` varchar(10) NOT NULL,
`memory` varchar(10) NOT NULL,
`networkSpeed` varchar(10) NOT NULL,
`networkHexValue` varchar(10) NOT NULL,
`enforce` int(11) NOT NULL,
`owner_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `containerization_con_owner_id_494eb637_fk_websiteFu` (`owner_id`),
CONSTRAINT `containerization_con_owner_id_494eb637_fk_websiteFu` FOREIGN KEY (`owner_id`) REFERENCES `websiteFunctions_websites` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
try:
connection.close()
except:
pass
except:
pass
@staticmethod @staticmethod
def enableServices(): def enableServices():
try: try:
@@ -705,6 +807,11 @@ WantedBy=multi-user.target"""
if items.find('dockerManager') > -1: if items.find('dockerManager') > -1:
dockerManager = 0 dockerManager = 0
containerization = 1
for items in data:
if items.find('containerization') > -1:
containerization = 0
Upgrade.stdOut('Restoring settings file!') Upgrade.stdOut('Restoring settings file!')
@@ -724,6 +831,10 @@ WantedBy=multi-user.target"""
writeToFile.writelines(" 's3Backups',\n") writeToFile.writelines(" 's3Backups',\n")
if dockerManager == 1: if dockerManager == 1:
writeToFile.writelines(" 'dockerManager',\n") writeToFile.writelines(" 'dockerManager',\n")
if containerization == 1:
writeToFile.writelines(" 'containerization',\n")
else: else:
writeToFile.writelines(items) writeToFile.writelines(items)
@@ -906,6 +1017,7 @@ WantedBy=multi-user.target"""
Upgrade.applyLoginSystemMigrations() Upgrade.applyLoginSystemMigrations()
Upgrade.s3BackupMigrations() Upgrade.s3BackupMigrations()
Upgrade.containerMigrations()
Upgrade.enableServices() Upgrade.enableServices()
Upgrade.installPHP73() Upgrade.installPHP73()

View File

@@ -9,7 +9,6 @@ try:
import threading as multi import threading as multi
from plogical.mailUtilities import mailUtilities from plogical.mailUtilities import mailUtilities
import boto3 import boto3
from minio.error import ResponseError
from boto3.s3.transfer import TransferConfig from boto3.s3.transfer import TransferConfig
import json import json
from .models import * from .models import *
@@ -148,6 +147,17 @@ class S3Backups(multi.Thread):
proc = httpProc(self.request, None, None) proc = httpProc(self.request, None, None)
return proc.ajax(0, str(msg)) return proc.ajax(0, str(msg))
def fetchAWSKeys(self):
path = '/home/cyberpanel/.aws'
credentials = path + '/credentials'
data = open(credentials, 'r').readlines()
aws_access_key_id = data[1].split(' ')[2].strip(' ').strip('\n')
aws_secret_access_key = data[2].split(' ')[2].strip(' ').strip('\n')
return aws_access_key_id, aws_secret_access_key
def fetchBuckets(self): def fetchBuckets(self):
try: try:
@@ -159,7 +169,15 @@ class S3Backups(multi.Thread):
if currentACL['admin'] == 0: if currentACL['admin'] == 0:
return proc.ajax(0, 'Only administrators can use AWS S3 Backups.') return proc.ajax(0, 'Only administrators can use AWS S3 Backups.')
s3 = boto3.resource('s3')
aws_access_key_id, aws_secret_access_key = self.fetchAWSKeys()
s3 = boto3.resource(
's3',
aws_access_key_id = aws_access_key_id,
aws_secret_access_key = aws_secret_access_key
)
json_data = "[" json_data = "["
checker = 0 checker = 0
@@ -404,7 +422,16 @@ class S3Backups(multi.Thread):
plan = BackupPlan.objects.get(name=self.data['planName']) plan = BackupPlan.objects.get(name=self.data['planName'])
bucketName = plan.bucket.strip('\n').strip(' ') bucketName = plan.bucket.strip('\n').strip(' ')
runTime = time.strftime("%d:%m:%Y") runTime = time.strftime("%d:%m:%Y")
client = boto3.client('s3')
aws_access_key_id, aws_secret_access_key = self.fetchAWSKeys()
client = boto3.client(
's3',
aws_access_key_id = aws_access_key_id,
aws_secret_access_key = aws_secret_access_key
)
config = TransferConfig(multipart_threshold=1024 * 25, max_concurrency=10, config = TransferConfig(multipart_threshold=1024 * 25, max_concurrency=10,
multipart_chunksize=1024 * 25, use_threads=True) multipart_chunksize=1024 * 25, use_threads=True)

View File

@@ -41,7 +41,7 @@ init()
PHP_SUEXEC=2 PHP_SUEXEC=2
WS_USER=nobody WS_USER=nobody
WS_GROUP=nogroup WS_GROUP=nobody
DIR_OWN="nobody:nobody" DIR_OWN="nobody:nobody"
CONF_OWN="nobody:nobody" CONF_OWN="nobody:nobody"
@@ -1361,4 +1361,3 @@ EOF
fi fi
} }

View File

@@ -384,7 +384,7 @@ EOF
if [ $SEL -eq "1" ]; then if [ $SEL -eq "1" ]; then
HOST_PANEL="cpanel" HOST_PANEL="cpanel"
WS_USER=nobody WS_USER=nobody
WS_GROUP=nogroup WS_GROUP=nobody
if [ -e "/etc/cpanel/ea4/is_ea4" ] ; then if [ -e "/etc/cpanel/ea4/is_ea4" ] ; then
PANEL_VARY=".ea4" PANEL_VARY=".ea4"
fi fi
@@ -503,4 +503,3 @@ fi
finish finish

View File

@@ -234,9 +234,9 @@ app.controller('listWebsites', function ($scope, $http) {
function ListInitialData(response) { function ListInitialData(response) {
if (response.data.listWebSiteStatus === 1) { if (response.data.listWebSiteStatus === 1) {
var finalData = JSON.parse(response.data.data); var finalData = JSON.parse(response.data.data);
$scope.WebSitesList = finalData; $scope.WebSitesList = finalData;
$scope.pagination = response.data.pagination;
$("#listFail").hide(); $("#listFail").hide();
} }
else { else {

View File

@@ -234,9 +234,9 @@ app.controller('listWebsites', function ($scope, $http) {
function ListInitialData(response) { function ListInitialData(response) {
if (response.data.listWebSiteStatus === 1) { if (response.data.listWebSiteStatus === 1) {
var finalData = JSON.parse(response.data.data); var finalData = JSON.parse(response.data.data);
$scope.WebSitesList = finalData; $scope.WebSitesList = finalData;
$scope.pagination = response.data.pagination;
$("#listFail").hide(); $("#listFail").hide();
} }
else { else {

View File

@@ -21,8 +21,6 @@
src="{% static 'images/loading.gif' %}"> src="{% static 'images/loading.gif' %}">
</h3> </h3>
<div class="example-box-wrapper"> <div class="example-box-wrapper">
<form name="websiteCreationForm" action="/" id="createPackages" <form name="websiteCreationForm" action="/" id="createPackages"
class="form-horizontal bordered-row"> class="form-horizontal bordered-row">
@@ -165,7 +163,6 @@
</form> </form>
</div> </div>
</div> </div>
</div> </div>