diff --git a/plugins/dynamix.docker.manager/default.cfg b/plugins/dynamix.docker.manager/default.cfg new file mode 100644 index 000000000..366233525 --- /dev/null +++ b/plugins/dynamix.docker.manager/default.cfg @@ -0,0 +1,7 @@ +DOCKER_ENABLED="no" +DOCKER_IMAGE_SIZE="20" +DOCKER_LOG_ROTATION="yes" +DOCKER_LOG_SIZE="50m" +DOCKER_LOG_FILES="1" +DOCKER_AUTHORING_MODE="no" +DOCKER_USER_NETWORKS="remove" diff --git a/plugins/dynamix.docker.manager/include/CreateDocker.php b/plugins/dynamix.docker.manager/include/CreateDocker.php index 69bbe8e86..11c027cd2 100644 --- a/plugins/dynamix.docker.manager/include/CreateDocker.php +++ b/plugins/dynamix.docker.manager/include/CreateDocker.php @@ -18,6 +18,7 @@ require_once "$docroot/plugins/dynamix.docker.manager/include/Helpers.php"; require_once "$docroot/webGui/include/Helpers.php"; $var = parse_ini_file('state/var.ini'); +$cfg = parse_ini_file('boot/config/docker.cfg'); ignore_user_abort(true); $DockerClient = new DockerClient(); diff --git a/plugins/dynamix.docker.manager/include/DockerClient.php b/plugins/dynamix.docker.manager/include/DockerClient.php index b9dd92ed7..eb0c7d2f8 100644 --- a/plugins/dynamix.docker.manager/include/DockerClient.php +++ b/plugins/dynamix.docker.manager/include/DockerClient.php @@ -38,7 +38,8 @@ $driver = DockerUtil::driver(); // Docker configuration file - guaranteed to exist $docker_cfgfile = '/boot/config/docker.cfg'; -$dockercfg = parse_ini_file($docker_cfgfile); +$defaults = @parse_ini_file("$docroot/plugins/dynamix.docker.manager/default.cfg") ?: []; +$dockercfg = array_replace_recursive($defaults, parse_ini_file($docker_cfgfile)); function var_split($item, $i=0) { return explode(' ',$item)[$i]; diff --git a/plugins/dynamix.docker.manager/include/Helpers.php b/plugins/dynamix.docker.manager/include/Helpers.php index 40614fe7d..b0ec848c9 100644 --- a/plugins/dynamix.docker.manager/include/Helpers.php +++ b/plugins/dynamix.docker.manager/include/Helpers.php @@ -1,5 +1,17 @@ + - function xml_encode($string) { return htmlspecialchars($string, ENT_XML1, 'UTF-8'); } @@ -242,7 +254,7 @@ function xmlSecurity(&$template) { } function xmlToCommand($xml, $create_paths=false) { - global $docroot, $var, $driver; + global $docroot, $var, $cfg, $driver; $xml = xmlToVar($xml); $cmdName = strlen($xml['Name']) ? '--name='.escapeshellarg($xml['Name']) : ''; $cmdPrivileged = strtolower($xml['Privileged'])=='true' ? '--privileged=true' : ''; @@ -294,10 +306,16 @@ function xmlToCommand($xml, $create_paths=false) { $Devices[] = escapeshellarg($hostConfig); } } - - $cmd = sprintf($docroot.'/plugins/dynamix.docker.manager/scripts/docker create %s %s %s %s %s %s %s %s %s %s %s %s %s', - $cmdName, $cmdNetwork, $cmdMyIP, $cmdCPUset, $cmdPrivileged, implode(' -e ', $Variables), implode(' -l ', $Labels), implode(' -p ', $Ports), implode(' -v ', $Volumes), implode(' --device=', $Devices), $xml['ExtraParams'], escapeshellarg($xml['Repository']), $xml['PostArgs']); - return [preg_replace('/\s+/', ' ', $cmd), $xml['Name'], $xml['Repository']]; + $logSize = $logFile = ''; + if ($cfg['DOCKER_LOG_ROTATION']=='yes') { + $logSize = $cfg['DOCKER_LOG_SIZE'] ?? '10m'; + $logSize = "--log-opt max-size='$logSize'"; + $logFile = $cfg['DOCKER_LOG_FILES'] ?? '1'; + $logFile = "--log-opt max-file='$logFile'"; + } + $cmd = sprintf($docroot.'/plugins/dynamix.docker.manager/scripts/docker create %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s', + $cmdName, $cmdNetwork, $cmdMyIP, $cmdCPUset, $logSize, $logFile, $cmdPrivileged, implode(' -e ', $Variables), implode(' -l ', $Labels), implode(' -p ', $Ports), implode(' -v ', $Volumes), implode(' --device=', $Devices), $xml['ExtraParams'], escapeshellarg($xml['Repository']), $xml['PostArgs']); + return [preg_replace('/\s\s+/', ' ', $cmd), $xml['Name'], $xml['Repository']]; } function stopContainer($name, $t=10, $echo=true) { global $DockerClient; diff --git a/plugins/dynamix.docker.manager/javascript/docker.js b/plugins/dynamix.docker.manager/javascript/docker.js index 2768cbfe1..66de71725 100644 --- a/plugins/dynamix.docker.manager/javascript/docker.js +++ b/plugins/dynamix.docker.manager/javascript/docker.js @@ -162,22 +162,22 @@ function eventControl(params, spin) { } function startAll() { $('input[type=button]').prop('disabled',true); - for (var i=0,ct; ct=docker[i]; i++) if (ct.state==0) $('#'+ct.id).find('i').removeClass('fa-square').addClass('fa-refresh fa-spin'); + for (var i=0,ct; ct=docker[i]; i++) if (ct.state==0) $('#'+ct.id).parent().find('i').removeClass('fa-square').addClass('fa-refresh fa-spin'); $.post('/plugins/dynamix.docker.manager/include/ContainerManager.php',{action:'start'},function(){loadlist();}); } function stopAll() { $('input[type=button]').prop('disabled',true); - for (var i=0,ct; ct=docker[i]; i++) if (ct.state==1) $('#'+ct.id).find('i').removeClass('fa-play fa-pause').addClass('fa-refresh fa-spin'); + for (var i=0,ct; ct=docker[i]; i++) if (ct.state==1) $('#'+ct.id).parent().find('i').removeClass('fa-play fa-pause').addClass('fa-refresh fa-spin'); $.post('/plugins/dynamix.docker.manager/include/ContainerManager.php',{action:'stop'},function(){loadlist();}); } function pauseAll() { $('input[type=button]').prop('disabled',true); - for (var i=0,ct; ct=docker[i]; i++) if (ct.state==1 && ct.pause==0) $('#'+ct.id).find('i').removeClass('fa-play').addClass('fa-refresh fa-spin'); + for (var i=0,ct; ct=docker[i]; i++) if (ct.state==1 && ct.pause==0) $('#'+ct.id).parent().find('i').removeClass('fa-play').addClass('fa-refresh fa-spin'); $.post('/plugins/dynamix.docker.manager/include/ContainerManager.php',{action:'pause'},function(){loadlist();}); } function resumeAll() { $('input[type=button]').prop('disabled',true); - for (var i=0,ct; ct=docker[i]; i++) if (ct.state==1 && ct.pause==1) $('#'+ct.id).find('i').removeClass('fa-pause').addClass('fa-refresh fa-spin'); + for (var i=0,ct; ct=docker[i]; i++) if (ct.state==1 && ct.pause==1) $('#'+ct.id).parent().find('i').removeClass('fa-pause').addClass('fa-refresh fa-spin'); $.post('/plugins/dynamix.docker.manager/include/ContainerManager.php',{action:'unpause'},function(){loadlist();}); } function checkAll() { diff --git a/plugins/dynamix.vm.manager/javascript/vmmanager.js b/plugins/dynamix.vm.manager/javascript/vmmanager.js index a0cad9d2e..58fb2cc08 100644 --- a/plugins/dynamix.vm.manager/javascript/vmmanager.js +++ b/plugins/dynamix.vm.manager/javascript/vmmanager.js @@ -108,12 +108,12 @@ function addVMContext(name, uuid, template, state, vncurl, log){ } function startAll() { $('input[type=button]').prop('disabled',true); - for (var i=0,vm; vm=kvm[i]; i++) if (vm.state!='running') $('#vm-'+vm.id).find('i').removeClass('fa-square').addClass('fa-refresh fa-spin'); + for (var i=0,vm; vm=kvm[i]; i++) if (vm.state!='running') $('#vm-'+vm.id).parent().find('i').removeClass('fa-square').addClass('fa-refresh fa-spin'); $.post('/plugins/dynamix.vm.manager/include/VMManager.php',{action:'start'}, function(){loadlist();}); } function stopAll() { $('input[type=button]').prop('disabled',true); - for (var i=0,vm; vm=kvm[i]; i++) if (vm.state=='running') $('#vm-'+vm.id).find('i').removeClass('fa-play').addClass('fa-refresh fa-spin'); + for (var i=0,vm; vm=kvm[i]; i++) if (vm.state=='running') $('#vm-'+vm.id).parent().find('i').removeClass('fa-play').addClass('fa-refresh fa-spin'); $.post('/plugins/dynamix.vm.manager/include/VMManager.php',{action:'stop'}, function(){loadlist();}); } function vncOpen() { diff --git a/plugins/dynamix/include/SelectCase.php b/plugins/dynamix/include/SelectCase.php index b3e361451..27b23a6a3 100644 --- a/plugins/dynamix/include/SelectCase.php +++ b/plugins/dynamix/include/SelectCase.php @@ -33,9 +33,10 @@ $casemodel = $exist ? file_get_contents("$boot/$file") : ''; "> "> diff --git a/plugins/dynamix/include/SystemInformation.php b/plugins/dynamix/include/SystemInformation.php index 83d8dd05d..edabb8294 100644 --- a/plugins/dynamix/include/SystemInformation.php +++ b/plugins/dynamix/include/SystemInformation.php @@ -84,11 +84,11 @@ echo $cpumodel.(strpos($cpumodel,'@')!==false ? "" : " @ {$cpu['Current Speed']}