This commit is contained in:
olevole
2017-01-28 21:43:33 +03:00
parent 3f5ef1f405
commit ddff7b3ba5
11 changed files with 145 additions and 33 deletions

View File

@@ -147,6 +147,12 @@ class ClonOS
case 'bhyveAdd':
echo json_encode($this->bhyveAdd());
return;break;
case 'bhyveEdit':
echo json_encode($this->bhyveEdit());
return;break;
case 'bhyveEditVars':
echo json_encode($this->bhyveEditVars());
return;break;
case 'bhyveObtain':
echo json_encode($this->bhyveObtain());
return;break;
@@ -762,12 +768,27 @@ class ClonOS
function jailEdit()
{
$form=$this->_vars['form_data'];
print_r($form);
$str=array();
$jname=$form['jname'];
$arr=array('host_hostname','ip4_addr','allow_mount','interface','mount_ports','astart','vnet');
foreach($arr as $a)
{
if(isset($form[$a]))
{
$val=$form[$a];
if($val=='on') $val=1;
$str[]=$a.'='.$val;
}else{
$str[]=$a.'=0';
}
}
//cbsd jset jname=XXX ip4_addr=192.168.0.1 astart=1 baserw=0
//$res=$this->cbsd_cmd('task owner=cbsdwebsys mode=new /usr/local/bin/cbsd jstart inter=0 jname='.$name);
$cmd='jset jname='.$jname.' '.join(' ',$str);
$res=$this->cbsd_cmd($cmd);
$res['mode']='jailEdit';
$res['form']=$form;
return $res;
}
function jailStart($name)
@@ -791,6 +812,62 @@ class ClonOS
return $res;
}
function bhyveEditVars()
{
$form=$this->_vars['form_data'];
if(!isset($form['jail_id'])) return array('error'=>true,'error_message'=>'Bad jail id!');
$db=new Db('base','local');
if($db!==false)
{
$query="SELECT b.jname as vm_name,vm_cpus,vm_ram,vm_vnc_port as vnc_port,interface FROM bhyve as b inner join jails as j on b.jname=j.jname and b.jname='{$form['jail_id']}';";
//$query="SELECT jname as vm_name,vm_cpus,vm_ram,vm_vnc_port as vnc_port FROM bhyve WHERE jname='{$form['jail_id']}';";
$res['vars']=$db->selectAssoc($query);
$res['vars']['vm_ram']=$this->fileSizeConvert($res['vars']['vm_ram']);
}
$res['error']=false;
$res['dialog']=$form['dialog'];
$res['jail_id']=$form['jail_id'];
return $res;
}
function bhyveEdit()
{
$form=$this->_vars['form_data'];
$str=array();
$jname=$form['jname'];
$ram=$form['vm_ram'];
$ram_tmp=$ram;
$ram=str_replace(' ','',$ram);
$ram=str_ireplace('mb','m',$ram);
$ram=str_ireplace('gb','g',$ram);
$form['vm_ram']=$ram;
$arr=array('vm_cpus','vm_ram','vnc_port','interface');
foreach($arr as $a)
{
if(isset($form[$a]))
{
$val=$form[$a];
if($val=='on') $val=1;
$str[]=$a.'='.$val;
}else{
$str[]=$a.'=0';
}
}
$form['vm_ram']=$ram_tmp;
$cmd='bset jname='.$jname.' '.join(' ',$str);
$res=$this->cbsd_cmd($cmd);
$res['mode']='bhyveEdit';
$res['form']=$form;
return $res;
}
function bhyveAdd()
{
$form=$this->_vars['form_data'];
@@ -1272,8 +1349,8 @@ class ClonOS
$fp=fopen($log_file,'r');
if($fp)
{
fseek($fp,-204800,SEEK_END);
$html='<strong>Last 2 KB of big file data:<strong><hr />'.fread($fp,204800);
fseek($fp,-1000,SEEK_END); //204800
$html='<strong>Last 1000 Bytes of big file data:<strong><hr />'.fread($fp,1000); //204800
}
fclose($fp);
}
@@ -1345,7 +1422,8 @@ class ClonOS
$res=$this->cbsd_cmd("vm_vncwss jname={$jname} permit={$this->_client_ip}");
$res=$this->_db_local->selectAssoc('select nodeip from local');
$nodeip=$res['nodeip'];
if(strlen($nodeip)<10) $nodeip='127.0.0.1';
// need for IPv4/IPv6 regex here, instead of strlen
if(strlen($nodeip)<7) $nodeip='127.0.0.1';
header('Location: http://'.$nodeip.':6080/vnc_auto.html?host='.$nodeip.'&port=6080');
exit;
}

View File

@@ -614,16 +614,12 @@ dialog::backdrop,
-webkit-backdrop-filter:blur(5px);
z-index:1000;
}
dialog.new h1 .edit,
dialog.new .buttons .edit,
dialog.edit h1 .new,
dialog.edit .buttons .new {
dialog.new .edit,
dialog.edit .new {
display:none;
}
dialog.new h1 .new,
dialog.new .buttons .new,
dialog.edit h1 .edit,
dialog.edit .buttons .edit {
dialog.new .new,
dialog.edit .edit {
display:inline-block;
}
.dialog-close:before {

View File

@@ -6,11 +6,14 @@ err_messages={
};
</script>
<dialog id="bhyve-new" class="window-box">
<h1><?php echo $this->translate('Create Virtual Machine');?></h1>
<h1>
<span class="new"><?php echo $this->translate('Create Virtual Machine');?></span>
<span class="edit"><?php echo $this->translate('Edit Virtual Machine');?></span>
</h1>
<h2><?php echo $this->translate('Virtual Machine Settings');?></h2>
<form class="win" method="post" id="bhyveSettings" onsubmit="return false;">
<div class="window-content">
<p>
<p class="new">
<span class="field-name"><?php echo $this->translate('VM OS profile');?>:</span>
<select name="vm_os_profile">
<?php echo $this->config->os_types_create(); ?>
@@ -18,11 +21,11 @@ err_messages={
</p>
<p>
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" />
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" class="edit-disable" />
</p>
<p>
<p class="new">
<span class="field-name"><?php echo $this->translate('VM Image size');?>:</span>
<input type="text" name="vm_size" value="" pattern="^[0-9]+g$" placeholder="10g" required="required" />
<input type="text" name="vm_size" value="" pattern="^[0-9]+g$" placeholder="10g" required="required" class="edit-disable" />
</p>
<p>
<span class="field-name"><?php echo $this->translate('VM CPUs');?>:</span>
@@ -30,7 +33,7 @@ err_messages={
</p>
<p>
<span class="field-name"><?php echo $this->translate('VM RAM');?>:</span>
<input type="text" name="vm_ram" value="" pattern="^[0-9]+g$" placeholder="1g" required="required" />
<input type="text" name="vm_ram" value="" pattern="^[0-9]+\s*(g|G|gb|GB|mb|MB|m|M)$" placeholder="1g" required="required" />
</p>
<p>
<span class="field-name"><?php echo $this->translate('VNC PORT');?>:</span>
@@ -50,7 +53,8 @@ err_messages={
</div>
</form>
<div class="buttons">
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
</div>
</dialog>

View File

@@ -17,7 +17,7 @@ err_messages={
<div class="window-content">
<p>
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" />
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
</p>
<p>
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
@@ -30,11 +30,11 @@ err_messages={
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
</p>
<p>
<p class="new">
<span class="field-name"><?php echo $this->translate('Root password');?>:</span>
<input type="password" name="user_pw_root" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input>
</p>
<p>
<p class="new">
<span class="field-name"><?php echo $this->translate('Root password (again)');?>:</span>
<input type="password" name="user_pw_root_1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input>
</p>
@@ -53,7 +53,7 @@ err_messages={
<br />
<input type="checkbox" name="vnet" id="vnet-id" /><label for="vnet-id"> <?php echo $this->translate('Virtual network stack (VIMAGE)');?></label>
</p>
<p>
<p class="new">
<span class="field-name"><?php echo $this->translate('Enabled services');?>:</span>
<input type="checkbox" name="serv-ftpd" value="ftpd" id="esrv0" class="inline"><label for="esrv0">ftpd</label></checkbox>
<input type="checkbox" name="serv-sshd" value="sshd" id="esrv1" class="inline"><label for="esrv1">sshd</label></checkbox>

View File

@@ -169,6 +169,8 @@ var clonos={
$(dlg).removeClass('edit').addClass('new');
$(dlg).prop('mode','new');
}
$('dialog#'+id+'.edit .edit-disable, dialog#'+id+'.new .new-disable').prop('disabled',true);
$('dialog#'+id+'.edit .new-disable, dialog#'+id+'.new .edit-disable').prop('disabled',false);
if($('span.close-but',dlg).length==0)
$('h1',dlg).before('<span class="close-but">×</span>');
@@ -289,6 +291,7 @@ var clonos={
this.tmp_jail_info[jid]={};
this.tmp_jail_info[jid]['runasap']=$('#astart-id:checked').length>0?1:0;
var posts=$('form#jailSettings').serializeArray();
if(mode=='edit') posts.push({'name':'jname','value':jid});
var jmode=(mode=='edit'?'jailEdit':'jailAdd');
this.loadData(jmode,$.proxy(this.onJailAdd,this),posts);
}
@@ -297,7 +300,7 @@ var clonos={
var jid=$('form#bhyveSettings input[name="vm_name"]').val();
if(typeof this.trids!='undefined' && this.trids.length>0)
{
if(this.trids.indexOf(jid)!=-1)
if(mode!='edit' && this.trids.indexOf(jid)!=-1)
{
var inp=$('form#bhyveSettings input[name="vm_name"]').get(0);
inp.setCustomValidity(this.translate('This name is already exists!'));
@@ -308,7 +311,9 @@ var clonos={
this.tmp_jail_info[jid]={};
this.tmp_jail_info[jid]['runasap']=0; // исправить на реальные данные!
var posts=$('form#bhyveSettings').serializeArray();
this.loadData('bhyveAdd',$.proxy(this.onJailAdd,this),posts);
if(mode=='edit') posts.push({'name':'jname','value':jid});
var bmode=(mode=='edit'?'bhyveEdit':'bhyveAdd');
this.loadData(bmode,$.proxy(this.onJailAdd,this),posts);
}
if(id=='bhyve-obtain' && $('form#bhyveObtSettings').length>0)
{
@@ -345,6 +350,22 @@ var clonos={
}
},
fillFormDataOnChange:function(data)
{
if(typeof data.form!='undefined')
{
if(typeof data.form['jname']!='undefined')
{
var jname=data.form['jname'];
delete(data.form['jname']);
for(k in data.form)
{
var v=data.form[k];
$('tr#'+jname+' td.'+k).html(v);
}
}
}
},
onJailAdd:function(data)
{
try{
@@ -357,6 +378,11 @@ var clonos={
{
switch(data.mode)
{
case 'jailEdit':
case 'bhyveEdit':
this.dialogClose();
this.fillFormDataOnChange(data);
return;break;
case 'jailAdd':
var table='jailslist';
var operation='jcreate';
@@ -1502,6 +1528,10 @@ var clonos={
var dialog='jail-settings';
var mode='jailEditVars';
break;
case 'bhyveslist':
var dialog='bhyve-new';
var mode='bhyveEditVars';
break;
}
this.DDMenuClose();

View File

@@ -55,6 +55,8 @@ if(!empty($nodes))foreach($nodes as $node)
foreach($vars as $var=>$val)
$html_tpl=str_replace('#'.$var.'#',$val,$html_tpl);
if($node!='local') $html_tpl=str_replace('<span class="icon-cog"></span>','',$html_tpl);
$html.=$html_tpl;
}

View File

@@ -2,8 +2,8 @@
<tr class="#nth-num##desktop##maintenance#" id="#jname#">
<td>#node#</td>
<td class="txtleft">#jname#</td>
<td class="txtleft">#vm_ram#</td>
<td>#vm_cpus#</td>
<td class="txtleft vm_ram">#vm_ram#</td>
<td class="vm_cpus">#vm_cpus#</td>
<td>#vm_os_type#</td>
<td class="jstatus">#vm_status#</td>
<td class="ops" width="5"><span class="icon-cnt"><span class="icon-#icon#"></span></span></td>

View File

@@ -49,6 +49,8 @@ if(!empty($nodes))foreach($nodes as $node)
foreach($vars as $var=>$val)
$html_tpl=str_replace('#'.$var.'#',$val,$html_tpl);
if($node!='local') $html_tpl=str_replace('<span class="icon-cog"></span>','',$html_tpl);
$html.=$html_tpl;
}

View File

@@ -2,7 +2,7 @@
<tr class="#nth-num##desktop##maintenance#" id="#jname#">
<td class="wordwreck">#node#</td>
<td class="txtleft">#jname#</td>
<td class="txtleft wordwreck">#ip4_addr#</td>
<td class="txtleft wordwreck ip4_addr">#ip4_addr#</td>
<td class="jstatus">#jstatus#</td>
<td class="ops" width="5"><span class="icon-cnt"><span class="icon-#icon#"></span></span></td>
<td width="5" class="op-settings"><span class="icon-cog"></span></td>

View File

@@ -1,3 +1,3 @@
<h1>SQLite admin interface</h1>
<p><a href="https://clonos.bsdstore.ru/phpliteadmin.php" target="_blank">Open SQLite Admin interface</a></p>
<p><a href="/phpliteadmin.php" target="_blank">Open SQLite Admin interface</a></p>

View File

@@ -1,3 +1,3 @@
<h1>Интерфейс админинстрирования SQLite</h1>
<p><a href="https://clonos.bsdstore.ru/phpliteadmin.php" target="_blank">Открыть веб-интерфейс SQLite Admin</a></p>
<p><a href="/phpliteadmin.php" target="_blank">Открыть веб-интерфейс SQLite Admin</a></p>