* Finish task #88024,88025.

This commit is contained in:
zhaoke
2023-03-24 13:05:27 +08:00
parent 4055ee45aa
commit 5db6ae03ac
14 changed files with 169 additions and 29 deletions
+32 -1
View File
@@ -3,7 +3,7 @@ $config->zanode->create = new stdClass();
$config->zanode->edit = new stdClass();
$config->zanode->createimage = new stdClass();
$config->zanode->create->requiredFields = 'name,host,image,cpu,memory,disk,osName';
$config->zanode->create->physicsRequiredFields = 'name,extranet,cpu,memory,osName';
$config->zanode->create->physicsRequiredFields = 'name,extranet,cpu,memory,osNamePhysics';
$config->zanode->edit->requiredFields = '';
$config->zanode->createimage->requiredFields = 'name';
@@ -13,6 +13,7 @@ $config->zanode->defaultWinAccount = 'admin';
$config->zanode->defaultPwd = 'CQdliYQn6tKkoFhP';
$config->zanode->initBash = 'curl -sSL https://pkg.qucheng.com/zenagent/zagent.sh | bash /dev/stdin -s zvm -k %s -z %s';
$config->zanode->initPosh = 'Invoke-WebRequest -UseBasicParsing -Uri "https://pkg.qucheng.com/zenagent/zagent-vm.ps1" -OutFile "./install-zanget-vm.ps1"; &"./install-zanget-vm.ps1" -s %s -z %s';
$config->zanode->os = new stdClass();
@@ -51,3 +52,33 @@ $config->zanode->editor->create = array('id' => 'desc', 'tools' => 'simpleT
$config->zanode->editor->edit = array('id' => 'desc', 'tools' => 'simpleTools');
$config->zanode->editor->createimage = array('id' => 'desc', 'tools' => 'simpleTools');
$config->zanode->editor->view = array('id' => 'comment,lastComment', 'tools' => 'simpleTools');
$config->zanode->osType = array('linux' => 'Linux', 'windows' => 'Microsoft Windows');
$config->zanode->linuxList[''] = '';
$config->zanode->linuxList['centOS65'] = 'CentOS 6.5';
$config->zanode->linuxList['centOS66'] = 'CentOS 6.6';
$config->zanode->linuxList['centOS67'] = 'CentOS 6.7';
$config->zanode->linuxList['centOS70'] = 'CentOS 7.0';
$config->zanode->linuxList['centOS71'] = 'CentOS 7.1';
$config->zanode->linuxList['centOS79'] = 'CentOS 7.9';
$config->zanode->linuxList['ubuntu1404'] = 'Ubuntu 14.04';
$config->zanode->linuxList['ubuntu1604'] = 'Ubuntu 16.04';
$config->zanode->linuxList['ubuntu1804'] = 'Ubuntu 18.04';
$config->zanode->linuxList['ubuntu2004'] = 'Ubuntu 20.04';
$config->zanode->linuxList['debianBullseye'] = 'Debian Bullseye';
$config->zanode->linuxList['debianBuster'] = 'Debian Buster';
$config->zanode->windowsList[''] = '';
$config->zanode->windowsList['win10'] = 'Windows 10';
$config->zanode->windowsList['winserver08x64'] = 'Windows Server2008 x64';
$config->zanode->windowsList['winserver12'] = 'Windows Server2012';
$config->zanode->windowsList['winserver16'] = 'Windows Server2016';
$config->zanode->versionToOs[''] = '';
$config->zanode->versionToOs['win10'] = 'windows';
$config->zanode->versionToOs['winserver08x64'] = 'windows';
$config->zanode->versionToOs['winserver12'] = 'windows';
$config->zanode->versionToOs['winserver16'] = 'windows';
+3 -2
View File
@@ -167,7 +167,7 @@ class zanode extends control
$this->view->title = $this->lang->zanode->view;
$this->view->zanode = $node;
$this->view->snapshotList = $this->zanode->getSnapshotList($id);
$this->view->initBash = sprintf($this->config->zanode->initBash, $node->secret, getWebRoot(true));
$this->view->initBash = sprintf(zget($this->config->zanode->versionToOs, $node->osName, '') != '' ? $this->config->zanode->initPosh : $this->config->zanode->initBash, $node->secret, getWebRoot(true));
$this->view->actions = $this->loadModel('action')->getList('zanode', $id);
$this->view->users = $this->loadModel('user')->getPairs('noletter');
@@ -563,8 +563,9 @@ class zanode extends control
if ($node->status != 'running')
{
$serviceStatus['ZenAgent'] = "unknown";
$serviceStatus['ZTF'] = "unknown";
$serviceStatus['ZTF'] = "unknown";
}
$node->status = $node->status == 'online' ? 'ready' : $node->status;
$serviceStatus['node'] = $node->status;
return $this->send(array('result' => 'success', 'message' => '', 'data' => $serviceStatus));
+2
View File
@@ -1 +1,3 @@
.icon-help{line-height: 34px;}
#osNamePhysicsContainer{display: flex;}
#osNamePhysicsContainer select{margin-right: 5px;}
+29 -2
View File
@@ -12,7 +12,7 @@ function zanodeType()
$('#image').closest('tr').hide();
$('#extranet').closest('tr').removeClass('hidden');
$('#osName').addClass('hidden');
$('#osNamePhysics').removeClass('hidden');
$('#osNamePhysicsContainer').removeClass('hidden');
}
else
{
@@ -20,7 +20,7 @@ function zanodeType()
$('#image').closest('tr').show();
$('#extranet').closest('tr').addClass('hidden');
$('#osName').removeClass('hidden');
$('#osNamePhysics').addClass('hidden');
$('#osNamePhysicsContainer').addClass('hidden');
}
}
@@ -38,3 +38,30 @@ function loadHosts()
$('#hostIdBox').find('#parent').chosen();
});
}
$(function()
{
$('#osNamePhysicsPre').on('change', function()
{
console.log($(this).val())
if($(this).val() == 'linux')
{
$('#osNamePhysics').empty();
for(var i in linuxList)
{
console.log(linuxList[i])
$('#osNamePhysics').append('<option value="' + i + '">' + linuxList[i] + '</option>')
}
}
else
{
$('#osNamePhysics').empty();
for(var i in windowsList)
{
console.log(windowsList[i])
$('#osNamePhysics').append('<option value="' + i + '">' + windowsList[i] + '</option>')
}
}
$('#osNamePhysics').trigger('chosen:updated');
})
})
+11 -1
View File
@@ -36,7 +36,14 @@ function checkServiceStatus(){
{
if(resultData.data[key] == 'unknown')
{
$('.ztf-status').text(zanodeLang.init.unknown)
if(hostType == 'physics')
{
$('.ztf-status').text(zanodeLang.init.not_install)
}
else
{
$('.ztf-status').text(zanodeLang.init.unknown)
}
}
else
{
@@ -210,6 +217,9 @@ $('#jumpManual').click(function()
$(function(){
$('#checkServiceStatus').trigger("click")
if(hostType == 'physics'){
return;
}
checkInterval = setInterval(() => {
intervalTimes++;
if(intervalTimes > 300)
+6 -3
View File
@@ -22,6 +22,7 @@ $lang->zanode->getVNC = 'Remote management';
$lang->zanode->all = 'All';
$lang->zanode->byQuery = 'Search';
$lang->zanode->osName = 'System';
$lang->zanode->osNamePhysics = 'System';
$lang->zanode->image = 'VM Image';
$lang->zanode->imageName = 'Image Name';
$lang->zanode->name = 'Name';
@@ -29,7 +30,8 @@ $lang->zanode->start = 'Start After Created';
$lang->zanode->hostName = 'Host Name';
$lang->zanode->host = $lang->zanode->hostName;
$lang->zanode->extranet = 'IP/Domain';
$lang->zanode->sshAddress = 'SSH Command';
$lang->zanode->sshCommand = 'SSH Command';
$lang->zanode->sshAddress = 'SSH Address';
$lang->zanode->osArch = 'Arch';
$lang->zanode->cpuCores = 'CPU';
$lang->zanode->defaultUser = 'Default Account Name';
@@ -154,8 +156,9 @@ $lang->zanode->init->ready = "Ready";
$lang->zanode->init->next = "Next";
$lang->zanode->init->button = "Go To Settings";
$lang->zanode->init->initSuccessNoticeTitle = "The service is ready, and it takes two steps to execute the automated test on the execution node: <br/>1. Configure the automated test running environment according to the %s<br/>2. Go to %s";
$lang->zanode->init->initFailNotice = "Fail,Execute the installation service command on the node or <a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>.";
$lang->zanode->init->initSuccessNoticeTitle = "The service is ready, and it takes two steps to execute the automated test on the execution node: <br/>1. Configure the automated test running environment according to the %s<br/>2. Go to %s";
$lang->zanode->init->initFailNotice = "Fail,Execute the installation service command on the node or <a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>.";
$lang->zanode->init->initFailNoticeOnPhysics = "The service has not been installed yet, please check the service status after executing the following command on the execution node。<a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>";
$lang->zanode->init->serviceStatus = array(
"ZenAgent" => 'not_install',
+6 -3
View File
@@ -22,6 +22,7 @@ $lang->zanode->getVNC = 'Remote management';
$lang->zanode->all = 'All';
$lang->zanode->byQuery = 'Search';
$lang->zanode->osName = 'System';
$lang->zanode->osNamePhysics = 'System';
$lang->zanode->image = 'VM Image';
$lang->zanode->imageName = 'Image Name';
$lang->zanode->name = 'Name';
@@ -29,7 +30,8 @@ $lang->zanode->start = 'Start After Created';
$lang->zanode->hostName = 'Host Name';
$lang->zanode->host = $lang->zanode->hostName;
$lang->zanode->extranet = 'IP/Domain';
$lang->zanode->sshAddress = 'SSH Command';
$lang->zanode->sshCommand = 'SSH Command';
$lang->zanode->sshAddress = 'SSH Address';
$lang->zanode->osArch = 'Arch';
$lang->zanode->cpuCores = 'CPU';
$lang->zanode->defaultUser = 'Default Account Name';
@@ -154,8 +156,9 @@ $lang->zanode->init->ready = "Ready";
$lang->zanode->init->next = "Next";
$lang->zanode->init->button = "Go To Settings";
$lang->zanode->init->initSuccessNoticeTitle = "The service is ready, and it takes two steps to execute the automated test on the execution node: <br/>1. Configure the automated test running environment according to the %s<br/>2. Go to %s";
$lang->zanode->init->initFailNotice = "Fail,Execute the installation service command on the node or <a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>.";
$lang->zanode->init->initSuccessNoticeTitle = "The service is ready, and it takes two steps to execute the automated test on the execution node: <br/>1. Configure the automated test running environment according to the %s<br/>2. Go to %s";
$lang->zanode->init->initFailNotice = "Fail,Execute the installation service command on the node or <a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>.";
$lang->zanode->init->initFailNoticeOnPhysics = "The service has not been installed yet, please check the service status after executing the following command on the execution node。<a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>";
$lang->zanode->init->serviceStatus = array(
"ZenAgent" => 'not_install',
+6 -3
View File
@@ -22,6 +22,7 @@ $lang->zanode->getVNC = 'Remote management';
$lang->zanode->all = 'All';
$lang->zanode->byQuery = 'Search';
$lang->zanode->osName = 'System';
$lang->zanode->osNamePhysics = 'System';
$lang->zanode->image = 'VM Image';
$lang->zanode->imageName = 'Image Name';
$lang->zanode->name = 'Name';
@@ -29,7 +30,8 @@ $lang->zanode->start = 'Start After Created';
$lang->zanode->hostName = 'Host Name';
$lang->zanode->host = $lang->zanode->hostName;
$lang->zanode->extranet = 'IP/Domain';
$lang->zanode->sshAddress = 'SSH Command';
$lang->zanode->sshCommand = 'SSH Command';
$lang->zanode->sshAddress = 'SSH Address';
$lang->zanode->osArch = 'Arch';
$lang->zanode->cpuCores = 'CPU';
$lang->zanode->defaultUser = 'Default Account Name';
@@ -154,8 +156,9 @@ $lang->zanode->init->ready = "Ready";
$lang->zanode->init->next = "Next";
$lang->zanode->init->button = "Go To Settings";
$lang->zanode->init->initSuccessNoticeTitle = "The service is ready, and it takes two steps to execute the automated test on the execution node: <br/>1. Configure the automated test running environment according to the %s<br/>2. Go to %s";
$lang->zanode->init->initFailNotice = "Fail,Execute the installation service command on the node or <a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>.";
$lang->zanode->init->initSuccessNoticeTitle = "The service is ready, and it takes two steps to execute the automated test on the execution node: <br/>1. Configure the automated test running environment according to the %s<br/>2. Go to %s";
$lang->zanode->init->initFailNotice = "Fail,Execute the installation service command on the node or <a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>.";
$lang->zanode->init->initFailNoticeOnPhysics = "The service has not been installed yet, please check the service status after executing the following command on the execution node。<a href='https://github.com/easysoft/zenagent/' target='_blank'>See Help</a>";
$lang->zanode->init->serviceStatus = array(
"ZenAgent" => 'not_install',
+7 -4
View File
@@ -22,6 +22,7 @@ $lang->zanode->getVNC = '远程';
$lang->zanode->all = '全部';
$lang->zanode->byQuery = '搜索';
$lang->zanode->osName = '操作系统';
$lang->zanode->osNamePhysics = '操作系统';
$lang->zanode->image = '镜像';
$lang->zanode->imageName = '镜像名称';
$lang->zanode->name = '名称';
@@ -29,7 +30,8 @@ $lang->zanode->start = '创建后自动开启';
$lang->zanode->hostName = '所属宿主机';
$lang->zanode->host = $lang->zanode->hostName;
$lang->zanode->extranet = 'IP/域名';
$lang->zanode->sshAddress = 'SSH命令';
$lang->zanode->sshCommand = 'SSH命令';
$lang->zanode->sshAddress = 'SSH地址';
$lang->zanode->osArch = '架构';
$lang->zanode->cpuCores = 'CPU';
$lang->zanode->defaultUser = '默认用户';
@@ -136,7 +138,7 @@ $lang->zanode->statusList['shutoff'] = '已关机';
$lang->zanode->statusList['shutodown'] = '已关机';
$lang->zanode->statusList['destroy_fail'] = '销毁失败';
$lang->zanode->statusList['wait'] = '初始化中';
$lang->zanode->statusList['online'] = '已上架';
$lang->zanode->statusList['online'] = '运行中';
$lang->zanode->statusList['restoring'] = '还原中';
$lang->zanode->statusList['creating_snap'] = '创建快照中';
$lang->zanode->statusList['creating_img'] = '导出镜像中';
@@ -154,8 +156,9 @@ $lang->zanode->init->ready = "已就绪";
$lang->zanode->init->next = "下一步";
$lang->zanode->init->button = "去设置";
$lang->zanode->init->initSuccessNoticeTitle = "服务已就绪,还需两步即可在执行节点上执行自动化测试:<br/>1、根据%s配置自动化测试运行环境。<br/>2、进行%s";
$lang->zanode->init->initFailNotice = "服务未就绪,在执行节点上执行安装服务命令或<a href='https://github.com/easysoft/zenagent/' target='_blank'>查看帮助</a>.";
$lang->zanode->init->initSuccessNoticeTitle = "服务已就绪,还需两步即可在执行节点上执行自动化测试:<br/>1、根据%s配置自动化测试运行环境。<br/>2、进行%s";
$lang->zanode->init->initFailNotice = "服务未就绪,在执行节点上执行安装服务命令或<a href='https://github.com/easysoft/zenagent/' target='_blank'>查看帮助</a>.";
$lang->zanode->init->initFailNoticeOnPhysics = "服务还没有安装,请在执行节点执行以下命令后检测服务状态。<a href='https://github.com/easysoft/zenagent/' target='_blank'>查看帮助</a>";
$lang->zanode->init->serviceStatus = array(
"ZenAgent" => 'not_install',
+1 -1
View File
@@ -59,7 +59,6 @@ class zanodemodel extends model
$data = fixer::input('post')
->setIF($this->post->hostType == 'physics', 'parent', 0)
->setIF($this->post->hostType == 'physics', 'osName', $this->post->osNamePhysics)
->remove('osNamePhysics')
->get();
$data->type = "node";
@@ -80,6 +79,7 @@ class zanodemodel extends model
if(dao::isError()) return false;
unset($data->osNamePhysics);
if(!preg_match("/^(?!_)(?!-)(?!\.)[a-zA-Z0-9\_\.\-]+$/", $data->name))
{
dao::$errors[] = $this->lang->zanode->nameValid;
+1 -1
View File
@@ -69,7 +69,7 @@
<tr>
<td><?php echo $node->id; ?></td>
<td title='<?php echo $node->name ?>'><?php echo html::a($this->inlink('view', "id=$node->id"), $node->name, '', ""); ?></td>
<td><?php echo zget($this->lang->zanode->typeList, $node->type); ?></td>
<td><?php echo zget($this->lang->zanode->typeList, $node->hostType, zget($this->lang->zanode->typeList, $node->type)); ?></td>
<td><?php echo $node->extranet; ?></td>
<td><?php echo zget($config->zanode->os->cpuCores, $node->cpuCores); ?></td>
<td><?php echo $node->memory . $this->lang->zahost->unitList['GB']; ?></td>
+6 -2
View File
@@ -13,6 +13,8 @@
<?php include '../../common/view/header.html.php';?>
<?php include $app->getModuleRoot() . 'common/view/kindeditor.html.php';?>
<?php js::set('hostID', $hostID);?>
<?php js::set('linuxList', $config->zanode->linuxList);?>
<?php js::set('windowsList', $config->zanode->windowsList);?>
<div id='mainContent' class='main-row'>
<div class='main-col main-content'>
<div class='center-block'>
@@ -71,8 +73,10 @@
<tr>
<th><?php echo $lang->zanode->osName;?></th>
<td>
<?php echo html::input('osName', '', "class='form-control' readonly='readonly'")?>
<?php echo html::input('osNamePhysics', '', "class='form-control hidden'")?>
<?php echo html::input('osName', '', "class='form-control' readonly='readonly' onchange='zanodeOsChange()'")?>
<div id="osNamePhysicsContainer" class="hidden">
<?php echo html::select('', $config->zanode->osType, 'linux', "class='form-control' id='osNamePhysicsPre'") . html::select('osNamePhysics', $config->zanode->linuxList, '', "class='form-control chosen'"); ?>
</div>
</td>
</tr>
<tr>
+1 -1
View File
@@ -69,7 +69,7 @@
</tr>
<tr>
<th><?php echo $lang->zanode->osName;?></th>
<td><?php echo html::input('osName', $zanode->osName, "class='form-control' " . ($zanode->hostType != 'physics' ? "readonly='readonly'" : ''))?></td>
<td><?php echo html::input('osName', $zanode->hostType != 'physics' ? $zanode->osName : zget($config->zanode->linuxList, $zanode->osName, zget($config->zanode->windowsList, $zanode->osName)), "class='form-control' readonly='readonly'")?></td>
</tr>
<tr>
<th><?php echo $lang->zanode->desc ?></th>
+58 -5
View File
@@ -21,11 +21,13 @@
<?php js::set('nodeID', $zanode->id) ?>
<?php js::set('zanodeLang', $lang->zanode); ?>
<?php js::set('nodeStatus', $zanode->status); ?>
<?php js::set('hostType', $zanode->hostType); ?>
<?php js::set('webRoot', getWebRoot());?>
<?php $browseLink = $this->session->zanodeList ? $this->session->zanodeList : $this->createLink('zanode', 'browse', ""); ?>
<?php $browseLink = $this->session->zanodeList ? $this->session->zanodeList : $this->createLink('zanode', 'browse', "");?>
<?php
$vars = "id={$zanode->id}&orderBy=%s";
$account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccount : $config->zanode->defaultAccount;
$ssh = $zanode->hostType == 'physics' ? $zanode->extranet : ($zanode->ssh ? 'ssh ' . $account . '@' . $zanode->ip . ' -p ' . $zanode->ssh : '');
?>
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'>
@@ -43,6 +45,54 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
<div id='mainContent' class='main-row'>
<div class="col-8 main-col">
<div class="cell">
<?php if($zanode->hostType == 'physics'):?>
<div class="detail zanode-detail">
<div class="detail-title"><?php echo $lang->zanode->baseInfo; ?></div>
<div class="detail-content article-content">
<div class="main-row zanode-mt-8">
<div class="col-4">
<div class="main-row">
<div class="col-4 text-right"><?php echo $lang->zanode->osName; ?>:</div>
<div class="col-7"><?php echo zget($config->zanode->linuxList, $zanode->osName, zget($config->zanode->windowsList, $zanode->osName)); ?></div>
</div>
</div>
<div class="col-4">
<div class="main-row">
<div class="col-3 text-right"><?php echo $lang->zanode->sshAddress; ?>:</div>
<div class="col-8 node-not-wrap"><?php echo $ssh;?><?php echo $ssh ? " <button type='button' class='btn btn-info btn-mini btn-ssh-copy'><i class='icon-common-copy icon-copy' title='" . $lang->zanode->copy . "'></i></button>" : ''; ?></div>
</div>
<textarea style="display:none;" id="ssh-copy">ssh <?php echo $ssh; ?></textarea>
</div>
<div class="col-4">
<div class="main-row">
<div class="col-3 text-right"><?php echo $lang->zanode->cpuCores; ?>:</div>
<div class="col-8"><?php echo $zanode->cpuCores . ' ' . $lang->zanode->cpuUnit; ?></div>
</div>
</div>
</div>
<div class="main-row zanode-mt-8">
<div class="col-4">
<div class="main-row">
<div class="col-4 text-right"><?php echo $lang->zanode->status; ?>:</div>
<div class="col-7"><?php echo zget($lang->zanode->statusList, $zanode->status); ?></div>
</div>
</div>
<div class="col-4">
<div class="main-row">
<div class="col-3 text-right"><?php echo $lang->zanode->memory; ?>:</div>
<div class="col-8"><?php echo $zanode->memory; ?>&nbsp;GB</div>
</div>
</div>
<div class="col-4">
<div class="main-row">
<div class="col-3 text-right"><?php echo $lang->zanode->diskSize; ?>:</div>
<div class="col-8"><?php echo $zanode->diskSize; ?>&nbsp;GB</div>
</div>
</div>
</div>
</div>
</div>
<?php else: ?>
<div class="detail zanode-detail">
<div class="detail-title"><?php echo $lang->zanode->baseInfo; ?></div>
<div class="detail-content article-content">
@@ -55,10 +105,10 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
</div>
<div class="col-4">
<div class="main-row">
<div class="col-3 text-right"><?php echo $lang->zanode->sshAddress; ?>:</div>
<div class="col-8 node-not-wrap"><?php echo $zanode->ssh ? 'ssh ' . $account . '@' . $zanode->ip . ' -p ' . $zanode->ssh : ''; ?><?php echo $zanode->ssh ? " <button type='button' class='btn btn-info btn-mini btn-ssh-copy'><i class='icon-common-copy icon-copy' title='" . $lang->zanode->copy . "'></i></button>" : ''; ?></div>
<div class="col-3 text-right"><?php echo $lang->zanode->sshCommand; ?>:</div>
<div class="col-8 node-not-wrap"><?php echo $ssh;?><?php echo $ssh ? " <button type='button' class='btn btn-info btn-mini btn-ssh-copy'><i class='icon-common-copy icon-copy' title='" . $lang->zanode->copy . "'></i></button>" : ''; ?></div>
</div>
<textarea style="display:none;" id="ssh-copy">ssh <?php echo $account . '@' . $zanode->ip . ' -p ' . $zanode->ssh; ?></textarea>
<textarea style="display:none;" id="ssh-copy">ssh <?php echo $ssh; ?></textarea>
</div>
<div class="col-4">
<div class="main-row">
@@ -116,6 +166,7 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
</div>
</div>
</div>
<?php endif ?>
<div class="detail zanode-detail">
<div class="detail-title"><?php echo $lang->zanode->desc; ?></div>
<div class="detail-content article-content"><?php echo !empty($zanode->desc) ? htmlspecialchars_decode($zanode->desc) : $lang->noData; ?></div>
@@ -133,12 +184,14 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
<button type='button' id='checkServiceStatus' class='btn btn-info'><i class="icon icon-refresh"></i> <span class='checkStatus'><?php echo $lang->zanode->init->checkStatus;?></span></button>
</div>
<div class="detail-content article-content statusContainer load-indicator" id='serviceContent'>
<?php if($zanode->hostType != 'physics'):?>
<div class="service-status hide">
<span class='dot-symbol dot-zenagent text-danger'>●</span>
<span>&nbsp;ZenAgent &nbsp;
<span class="zenagent-status"><?php echo $lang->zanode->initializing; ?></span>
</span>
</div>
<?php endif ?>
<div class="service-status hide">
<span class='dot-symbol dot-ztf text-danger'>●</span>
<span>&nbsp;ZTF &nbsp;
@@ -150,7 +203,7 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
<span class='init-success hide'><?php echo sprintf($lang->zanode->init->initSuccessNoticeTitle, "<a id='jumpManual' href='javascript:;'>{$lang->zanode->manual}</a>", html::a(helper::createLink('testcase', 'automation', "", '', true), $lang->zanode->automation, '', "class='iframe' title='{$lang->zanode->automation}' data-width='50%'", '')); ?></span>
<?php if($zanode->hostType == 'physics'):?>
<div class='hide init-fail'>
<?php echo $lang->zanode->init->initFailNotice;?>
<?php echo $zanode->hostType == 'physics' ? $lang->zanode->init->initFailNoticeOnPhysics : $lang->zanode->init->initFailNotice;?>
<textarea style="display:none;" id="initBash"><?php echo $initBash; ?></textarea>
<div class="zanode-init">
<?php echo "$initBash <button type='button' class='btn btn-info btn-mini btn-init-copy'><i class='icon-common-copy icon-copy' title='" . $lang->zanode->copy . "'></i></button>"; ?>