diff --git a/.gitignore b/.gitignore index ba077a403..dd32f1ead 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +*.pyc bin diff --git a/CyberCP/settings.py b/CyberCP/settings.py index 0dd5d5dd9..7afd3b1da 100644 --- a/CyberCP/settings.py +++ b/CyberCP/settings.py @@ -24,7 +24,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = 'xr%j*p!*$0d%(-(e%@-*hyoz4$f%y77coq0u)6pwmjg4)q&19f' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = False +DEBUG = True ALLOWED_HOSTS = ['*'] @@ -110,15 +110,15 @@ DATABASES = { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'cyberpanel', 'USER': 'cyberpanel', - 'PASSWORD': 'Bz9gF7Hr7X4RtD', - 'HOST': '127.0.0.1', - 'PORT':'3307' + 'PASSWORD': '7Lu8u2NkBwOyWg', + 'HOST': 'localhost', + 'PORT': '', }, 'rootdb': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysql', 'USER': 'root', - 'PASSWORD': 'sXm5VlRaAsXkDd', + 'PASSWORD': 'Mb5Y9dU2gVb7pM', 'HOST': 'localhost', 'PORT': '', }, diff --git a/dockerManager/migrations/0001_initial.py b/dockerManager/migrations/0001_initial.py new file mode 100755 index 000000000..dcd06867c --- /dev/null +++ b/dockerManager/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2019-01-23 18:47 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('loginSystem', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Containers', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50, unique=True)), + ('cid', models.CharField(default='', max_length=64)), + ('image', models.CharField(default='unknown', max_length=50)), + ('tag', models.CharField(default='unknown', max_length=50)), + ('memory', models.IntegerField(default=0)), + ('ports', models.TextField(default='{}')), + ('env', models.TextField(default='{}')), + ('startOnReboot', models.IntegerField(default=0)), + ('admin', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='loginSystem.Administrator')), + ], + ), + ] diff --git a/dockerManager/migrations/0002_containers_volumes.py b/dockerManager/migrations/0002_containers_volumes.py new file mode 100644 index 000000000..2eff19c59 --- /dev/null +++ b/dockerManager/migrations/0002_containers_volumes.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2019-01-26 16:22 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dockerManager', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='containers', + name='volumes', + field=models.TextField(default='{}'), + ), + ] diff --git a/dockerManager/models.py b/dockerManager/models.py index b54527d4e..75d7328bc 100644 --- a/dockerManager/models.py +++ b/dockerManager/models.py @@ -13,5 +13,6 @@ class Containers(models.Model): tag = models.CharField(max_length=50, default='unknown') memory = models.IntegerField(default=0) ports = models.TextField(default="{}") + volumes = models.TextField(default="{}") env = models.TextField(default="{}") startOnReboot = models.IntegerField(default=0) diff --git a/dockerManager/static/dockerManager/dockerManager.js b/dockerManager/static/dockerManager/dockerManager.js index 96421e682..dca4cfe1b 100644 --- a/dockerManager/static/dockerManager/dockerManager.js +++ b/dockerManager/static/dockerManager/dockerManager.js @@ -119,6 +119,18 @@ app.controller('runContainer', function ($scope, $http) { $scope.success = true; $scope.couldNotConnect = 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 () { var countEnv = Object.keys($scope.envList).length; @@ -157,8 +169,8 @@ app.controller('runContainer', function ($scope, $http) { memory: memory, dockerOwner: dockerOwner, image: image, - envList: $scope.envList - + envList: $scope.envList, + volList: $scope.volList }; $.each($scope.portType, function (port, protocol) { @@ -698,6 +710,16 @@ app.controller('viewContainer', function ($scope, $http) { } } + + $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.saveSettings = function () { $('#containerSettingLoading').show(); @@ -709,7 +731,8 @@ app.controller('viewContainer', function ($scope, $http) { memory: $scope.memory, startOnReboot: $scope.startOnReboot, envConfirmation: $scope.envConfirmation, - envList: $scope.envList + envList: $scope.envList, + volList: $scope.volList }; console.log(data) diff --git a/dockerManager/templates/dockerManager/runContainer.html b/dockerManager/templates/dockerManager/runContainer.html index f801432fd..40046fb28 100644 --- a/dockerManager/templates/dockerManager/runContainer.html +++ b/dockerManager/templates/dockerManager/runContainer.html @@ -106,12 +106,39 @@ - - - +

+ +
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+ +
+ +

+
diff --git a/dockerManager/templates/dockerManager/viewContainer.html b/dockerManager/templates/dockerManager/viewContainer.html index 3baa62e11..524db5edd 100644 --- a/dockerManager/templates/dockerManager/viewContainer.html +++ b/dockerManager/templates/dockerManager/viewContainer.html @@ -210,12 +210,12 @@
- +
{% for env, value in envList.items %} @@ -245,6 +245,43 @@
+ + {% for key, value in volList.items %} + + + + + {% endfor %} + +
+ +
+ +
+
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+ +
+ +

+ diff --git a/plogical/container.py b/plogical/container.py index 58c5b8b2e..9bffe82cc 100644 --- a/plogical/container.py +++ b/plogical/container.py @@ -182,7 +182,7 @@ class ContainerManager(multi.Thread): data['ports'] = json.loads(con.ports) data['cid'] = con.cid data['envList'] = json.loads(con.env) - print data['envList'] + data['volList'] = json.loads(con.volumes) stats = container.stats(decode=False, stream=False) logs = container.logs(stream=True) @@ -300,6 +300,7 @@ class ContainerManager(multi.Thread): dockerOwner = data['dockerOwner'] memory = data['memory'] envList = data['envList'] + volList = data['volList'] inspectImage = dockerAPI.inspect_image(image + ":" + tag) portConfig = {} @@ -319,6 +320,12 @@ class ContainerManager(multi.Thread): return HttpResponse(json_data) portConfig[item] = data[item] + volumes = {} + for index, volume in volList.iteritems(): + volumes[volume['src']] = {'bind': volume['dest'], + 'mode': 'rw'} + print volumes + ## Create Configurations admin = Administrator.objects.get(userName=dockerOwner) @@ -327,7 +334,8 @@ class ContainerManager(multi.Thread): 'name': name, 'ports': portConfig, 'publish_all_ports': True, - 'environment': envDict} + 'environment': envDict, + 'volumes': volumes} containerArgs['mem_limit'] = memory * 1048576; # Converts MB to bytes ( 0 * x = 0 for unlimited memory) @@ -347,6 +355,7 @@ class ContainerManager(multi.Thread): image=image, memory=memory, ports=json.dumps(portConfig), + volumes=json.dumps(volumes), env=json.dumps(envDict), cid=container.id) @@ -881,11 +890,16 @@ class ContainerManager(multi.Thread): def doRecreateContainer(self, userID, data, con): try: + + client = docker.from_env() + dockerAPI = docker.APIClient() + name = data['name'] unlisted = data['unlisted'] # Pass this as 1 if image is not known for container image = data['image'] tag = data['tag'] env = data['env'] + volumes = data['volumes'] port = data['ports'] memory = data['memory'] @@ -902,6 +916,7 @@ class ContainerManager(multi.Thread): 'name': name, 'ports': port, 'environment': env, + 'volumes': volumes, 'publish_all_ports': True, 'mem_limit': memory * 1048576} @@ -928,6 +943,7 @@ class ContainerManager(multi.Thread): memory = data['memory'] startOnReboot = data['startOnReboot'] envList = data['envList'] + volList = data['volList'] if startOnReboot == True: startOnReboot = 1 @@ -966,7 +982,10 @@ class ContainerManager(multi.Thread): if (value['name'] != '') or (value['value'] != ''): envDict[value['name']] = value['value'] - print envDict + volumes = {} + for index, volume in volList.iteritems(): + volumes[volume['src']] = {'bind': volume['dest'], + 'mode': 'rw'} # Prepare data for recreate function data = { 'name': name, @@ -975,7 +994,7 @@ class ContainerManager(multi.Thread): 'tag': con.tag, 'env': envDict, 'ports': json.loads(con.ports), - # No filter needed now as its ports are filtered when adding to database + 'volumes': volumes, 'memory': con.memory } @@ -986,6 +1005,7 @@ class ContainerManager(multi.Thread): return HttpResponse(json_data) con.env = json.dumps(envDict) + con.volumes = json.dumps(volumes) con.save() data_ret = {'saveSettingsStatus': 1, 'error_message': 'None'}