钩子方法
温馨提示:
- 记得将命名空间中的“pluginExample”替换成插件名称
- URLOS自带了大量的可用函数(方法),请参考“URLOS内置函数”查看详情
- 所有钩子函数的参数都是一致的,说明如下:
$plugin 格式为“插件名:插件版本”或者“插件类型:插件名:插件版本”,如:pluginName:v0_1_0, system:phpWebsites:v0_1_0
$hook 插件钩子名称,如:trafficGetBootScript表示获取启动脚本
$vars 传入到钩子的变量,如:$vars['serviceId']为服务的ID,$vars['serviceArr']为服务的数组。
$pluginType 插件类型,共有以下3种插件类型:
$moduleName 模块名,如:admin, homesystem(系统插件)<br> official(官方插件)<br> user(用户插件,一般用于调试)<br> db(数据库类型的插件,直接在URLOS后台编写插件)<br>
<?php
namespace plugin\admin\db\pluginExample\v0_1_0;
use _common\lib\BaseHook as parentHook;
class hookLoader extends parentHook {
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 安装脚本相关
/**
* 处理并返回安装脚本所需要的服务数组
* @return array
*/
public function trafficGetInstallScriptServiceArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
#自定义代码
{
// $serviceArr['myVar'] = "ok";
}
#返回
return $serviceArr;
}
/**
* 处理并返回安装脚本
* @return array
*/
public function trafficGetInstallScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$installScript = $vars['installScript'];
#对installScript内容的相关处理,也可以直接替换
$shellArr = array();
$shellArr[] = $installScript; #应用的安装脚本
#支持多行Shell
$shellArr[] = '
#apt update -y && apt install nginx
if [ true ]; then
echo ok;
fi
';
#返回
return $shellArr;
}
/**
* 分析安装脚本执行的日志内容,如果有错误,则格式化后再返回
* @return (string or null)
*/
public function trafficReceiveInstallScriptResultLog($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appArr = $vars['appArr'];
$shellResult = $vars['shellResult'];
#自定义代码
{
#把错误内容格式化
if (preg_match('@Error: (.{1,100})@', $shellResult, $matchArr)) {
#错误内容
$errorMessage = '安装脚本执行错误:'.$matchArr[1];
#用于报错的内容(JSON格式)
$logJson = $this->msg->error($errorMessage, [], [
'description' => [
$this->getModel('service')->getDescription($serviceArr),
'脚本执行结果:'.mb_substr($shellResult, -4096), #显示执行结果,便于排错
]
]);
return $logJson;
}
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 配置脚本相关
/**
* 处理并返回配置脚本所需要的服务数组
* @return array
*/
public function trafficGetConfigScriptServiceArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
#自定义代码
{
// $serviceArr['myVar'] = "ok";
}
#返回
return $serviceArr;
}
/**
* 处理并返回配置脚本
* @return array
*/
public function trafficGetConfigScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$shellArr = $vars['configScriptArr'];
#支持多行Shell
$shellArr[] = '
#shell script
';
#返回
return $shellArr;
}
/**
* 分析配置脚本执行的日志内容,如果有错误,则格式化后再返回
* @return (string or null)
*/
public function trafficReceiveConfigScriptResultLog($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appArr = $vars['appArr'];
$shellResult = $vars['shellResult'];
#自定义代码
{
#把错误内容格式化
if (preg_match('@Error: (.{1,100})@', $shellResult, $matchArr)) {
#错误内容
$errorMessage = '配置脚本执行错误:'.$matchArr[1];
#用于报错的内容(JSON格式)
$logJson = $this->msg->error($errorMessage, [], [
'description' => [
$this->getModel('service')->getDescription($serviceArr),
'脚本执行结果:'.mb_substr($shellResult, -4096), #显示执行结果,便于排错
]
]);
return $logJson;
}
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 启动脚本相关
/**
* 处理并返回启动脚本所需要的服务数组
* @return array
*/
public function trafficGetBootScriptServiceArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
#自定义代码
{
// $serviceArr['myVar'] = "ok";
}
#返回
return $serviceArr;
}
/**
* 处理并返回启动脚本
* @return array
*/
public function trafficGetBootScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$bootScript = $vars['bootScript'];
#对bootScript内容的相关处理,也可以直接替换
$shellArr = array();
$shellArr[] = $bootScript; #应用的启动脚本
#支持多行Shell
$shellArr[] = '
#nginx
';
#返回
return $shellArr;
}
/**
* 分析启动脚本执行的日志内容,如果有错误,则格式化后再返回
* @return (string or null)
*/
public function trafficReceiveBootScriptResultLog($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appArr = $vars['appArr'];
$shellResult = $vars['shellResult'];
#自定义代码
{ //如需执行,把false改为true
#把错误内容格式化
if (preg_match('@Error: (.{1,100})@', $shellResult, $matchArr)) {
#错误内容
$errorMessage = '启动脚本执行错误:'.$matchArr[1];
#用于报错的内容(JSON格式)
$logJson = $this->msg->error($errorMessage, [], [
'description' => [
$this->getModel('service')->getDescription($serviceArr),
'脚本执行结果:'.mb_substr($shellResult, -4096), #显示执行结果,便于排错
]
]);
return $logJson;
}
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 数据脚本相关
/**
* 处理并返回启动脚本
* 注意:如果未定义数据模型和数据变量,就不会执行数据脚本
* @return array
*/
public function trafficGetDataScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
#对dataScript内容的相关处理,也可以直接替换
$shellArr = array();
#支持多行Shell
$shellArr[] = '
#shell script
';
#返回
return $shellArr;
}
/**
* 分析数据脚本执行的日志内容,如果有错误,则格式化后再返回
* @return (string or null)
*/
public function trafficReceiveDataScriptResultLog($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appArr = $vars['appArr'];
$shellResult = $vars['shellResult'];
#自定义代码
{
#把错误内容格式化
if (preg_match('@Error: (.{1,100})@', $shellResult, $matchArr)) {
#错误内容
$errorMessage = '数据脚本执行错误:'.$matchArr[1];
#用于报错的内容(JSON格式)
$logJson = $this->msg->error($errorMessage, [], [
'description' => [
$this->getModel('service')->getDescription($serviceArr),
'脚本执行结果:'.mb_substr($shellResult, -4096), #显示执行结果,便于排错
]
]);
return $logJson;
}
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 附加脚本相关
/**
* 处理并返回附加脚本所需要的服务数组
* @return array
*/
public function trafficGetAppendScriptServiceArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
#自定义代码
{
// $serviceArr['myVar'] = "ok";
}
#返回
return $serviceArr;
}
/**
* 处理并返回附加脚本
* @return array
*/
public function trafficGetAppendScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$appendScript = $vars['appendScript'];
#对appendScript内容的相关处理,也可以直接替换
$shellArr = array();
$shellArr[] = $appendScript; #应用的附加脚本
#支持多行Shell
$shellArr[] = '
#shell contents
';
#返回
return $shellArr;
}
/**
* 分析附加脚本执行的日志内容,如果有错误,则格式化后再返回
* @return (string or null)
*/
public function trafficReceiveAppendScriptResultLog($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appArr = $vars['appArr'];
$shellResult = $vars['shellResult'];
#自定义代码
{
#把错误内容格式化
if (preg_match('@Error: (.{1,100})@', $shellResult, $matchArr)) {
#错误内容
$errorMessage = '附加脚本执行错误:'.$matchArr[1];
#用于报错的内容(JSON格式)
$logJson = $this->msg->error($errorMessage, [], [
'description' => [
$this->getModel('service')->getDescription($serviceArr),
'脚本执行结果:'.mb_substr($shellResult, -4096), #显示执行结果,便于排错
]
]);
return $logJson;
}
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 状态脚本相关
/**
* 处理并返回启动脚本所需要的服务数组
* @return array
*/
public function trafficGetStatusScriptServiceArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
#自定义代码
{
// $serviceArr['myVar'] = "ok";
}
#返回
return $serviceArr;
}
/**
* 处理并返回启动脚本
* @return array
*/
public function trafficGetStatusScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$statusScript = $vars['statusScript'];
#对statusScript内容的相关处理,也可以直接替换
$shellArr = array();
$shellArr[] = $statusScript; #应用的启动脚本
#支持多行Shell
$shellArr[] = '
#shell script1
';
#返回
return $shellArr;
}
/**
* 分析状态脚本执行的日志内容,如果有错误,则格式化后再返回
* @return (string or null)
*/
public function trafficReceiveStatusScriptResultLog($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appArr = $vars['appArr'];
$shellResult = $vars['shellResult'];
#自定义代码
{ //如需执行,把false改为true
#把错误内容格式化
if (preg_match('@Error: (.{1,100})@', $shellResult, $matchArr)) {
#错误内容
$errorMessage = '状态脚本执行错误:'.$matchArr[1];
#用于报错的内容(JSON格式)
$logJson = $this->msg->error($errorMessage, [], [
'description' => [
$this->getModel('service')->getDescription($serviceArr),
'脚本执行结果:'.mb_substr($shellResult, -4096), #显示执行结果,便于排错
]
]);
return $logJson;
}
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 监控脚本相关
/**
* 处理并返回监控脚本
* @return array
*/
public function trafficGetMonitorScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$monitorScript = $vars['monitorScript'];
#对monitorScript内容的相关处理,也可以直接替换
$shellArr[] = $monitorScript;
#自定义代码
{
$shellArr[] = '#sleep 3'; #执行别太频繁
}
return $shellArr;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 退出脚本相关
/**
* 处理并返回退出脚本
* @return array
*/
public function trafficGetQuitScript($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$appId = $serviceArr['appId'];
$nodeId = $serviceArr['nodeId'];
$quitScript = $vars['quitScript'];
#对quitScript内容的相关处理,也可以直接替换
$shellArr[] = $quitScript;
#自定义代码
{
$shellArr[] = '#nginx -s stop && service mysql stop';
}
return $shellArr;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 服务启动相关
/**
* 修改docker run启动容器时的参数
* @return array
*/
public function serviceDeployDockerRunArgsArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$nodeArr = $vars['nodeArr'];
$swarmArr = $vars['swarmArr'];
$appArr = $vars['appArr'];
#docker run的附加参数(数组)
$dockerRunArgsArr = $vars['dockerRunArgsArr'];
#自定义代码
{
$dockerRunArgsArr[] = '--env "isMyEnv01=Yes"';
}
#是否强制部署
$forceDeploy = false;
#返回
return [$dockerRunArgsArr, $forceDeploy];
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 服务表单相关
/**
* 添加服务时对表单数据的相关处理
* @return array
*/
public function serviceGetAddDatasArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$datasArr = $vars['datasArr'];
$appId = $vars['appId'];
#自定义代码
{
#print_r($datasArr);
}
return $datasArr;
}
/**
* 修改服务时对表单数据的相关处理
* @return array
*/
public function serviceGetEditDatasArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$datasArr = $vars['datasArr'];
$appId = $vars['appId'];
#自定义代码
{
#print_r($datasArr);
}
return $datasArr;
}
/**
* 修改服务时的相关检查
* @return array
*/
public function serviceGetInputData($plugin, $hook, $vars, $pluginType, $moduleName) {
$inputDataArr = $vars['inputData'];
$serviceArr = $vars['serviceArr'];
#自定义代码
{
foreach ($inputDataArr as $key => $iarr) {
$fieldName = $iarr['fieldName'];
switch ($fieldName) {
case 'myFieldName': #变量名称
#URLOS使用了antd前端框架,具体请参考:https://3x.ant.design/index-cn
$iarr['disabled'] = true; #禁止修改
$iarr['title'] = '这是我的变量说明';
break;
}
$inputDataArr[$key] = $iarr;
}
}
return $inputDataArr;
}
/**
* 添加或修改服务时的选项卡
* @return array
*/
public function serviceStepCaptionArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$appArr = $vars['appArr'];
$stepCaptionArr = $vars['stepCaptionArr'];
#自定义代码
{
#增加A1步骤
#$stepCaptionArr['A1'] = '设置A1相关参数';
}
return $stepCaptionArr;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 服务表单验证相关
/**
* 添加服务时的相关检查(数据暂未存入数据库)
* @return array
*/
public function serviceAddDataCheck($plugin, $hook, $vars, $pluginType, $moduleName) {
return $this->serviceEditDataCheck($plugin, $hook, $vars, $pluginType, $moduleName);
}
/**
* 修改服务时的相关检查(数据暂未存入数据库)
* @return null
*/
public function serviceEditDataCheck($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArrOld'];
#自定义代码
{
if (preg_match('@8080:8080@s', $_POST['ports'])) {
if (false) { //如需执行,把false改为true
#直接报错
$this->msg->errorExit('服务端口和容器端口都必须是8080端口,请修正后再试!');
} else {
#报错并自动跳转到填写端口所在的步骤
$this->msg->serviceVerifyExit('服务端口和容器端口都必须是8080端口,请修正后再试!', 'ports', $serviceArr['appId']);
}
}
}
return null;
}
/**
* 添加服务时的相关处理(数据已经存入数据库)
* @return array
*/
public function serviceAddDataSaved($plugin, $hook, $vars, $pluginType, $moduleName) {
return $this->serviceEditDataSaved($plugin, $hook, $vars, $pluginType, $moduleName);
}
/**
* 修改服务时的相关处理(数据已经存入数据库)
* @return null
*/
public function serviceEditDataSaved($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArrOld = $vars['serviceArrOld']; #旧数据(如果是添加行为,则为空数组)
$serviceArr = $vars['serviceArr']; #保存后的新数据
$appArr = $vars['appArr'];
#自定义代码
{
#print_r($serviceArrOld);
#print_r($serviceArr);
}
return null;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 服务列表相关
/**
* 调整服务列表的“单个服务”数组
* @return array
*/
public function serviceListServerArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
#自定义代码
{
}
return $serviceArr;
}
/**
* 修改服务时的相关检查
* @return array
*/
public function serviceListActions($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
$actionsArr = $vars['actions'];
#自定义代码
{
$actionsArr[] = [
'text' => '自定义行为01',
'ajaxGetAppend' => [
'serviceId' => $serviceId,
'a' => 'custom',
'actionMark' => 'serviceCustom01Action',
],
// 操作前的提示:如果不需要提示,直接注释即可
'confirm' => [
'title' => '警告!',
'content' => '此操作将有风险,要继续吗?',
],
// 放到服务列表中的“更多”浮窗中
'inMoreBox' => true,
];
}
return $actionsArr;
}
/**
* 自定义行为01
* @return null
*/
public function serviceCustom01Action($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$serviceId = $serviceArr['id'];
#自定义代码
{
$containerInfoArr = $this->service->isRunning($serviceId);
if (!is_array($containerInfoArr)) {
$this->msg->errorExit('服务未运行!');
}
#主机数组
$nodeArr = $containerInfoArr['nodeArr'];
#容器的hostname(容器ID)
$containerHostname = $containerInfoArr['containerHostname'];
#异步执行命令
list($boolResult, $shellResult) = $this->shell->runShellInContainer([
'#shell script1',
'
#shell script2
if [ true ]; then
echo ok;
fi
',
#执行完成后发送一个通知给URLOS,通知类型:success, info, warning, error, fail
$this->shell->getSendNoticeShellInContainer(
'通知标题,如:命令执行完毕',
'通知内容,如:成功重载了Nginx,进程数为18,系统压力极大。',
'warning'
),
'echo WSY_EXEC_OK',
], $nodeArr, $containerHostname, [
'runType' => 'async' #同步执行使用sync(默认),异步执行则使用async
]);
if (strstr($shellResult, 'WSY_EXEC_OK') == false) {
$this->msg->errorExit('操作失败!');
}
}
$this->msg->successExit('操作成功');
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 网站代理相关
/**
* 某个网站的Nginx代理配置内容
* @return array
*/
public function websiteProxyVhostConfigContents($plugin, $hook, $vars, $pluginType, $moduleName) {
$websiteServiceId = $vars['websiteServiceId'];
$proxyServiceId = $vars['proxyServiceId'];
$vhostConfigContents = $vars['vhostConfigContents'];
#自定义代码
{
}
return $vhostConfigContents;
}
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 服务部署相关
/**
* 部署服务前的检查或处理
* @return array
*/
public function sendDeployServiceCronHandle($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$appArr = $vars['appArr'];
$swarmArr = $vars['swarmArr'];
$leaderNodeArr = $vars['leaderNodeArr'];
#自定义代码
{
#修改为强制部署
$serviceArr['deployDataHash'] = 'force';
#修改为暴力部署
$serviceArr['deployDataHash'] = 'force2';
#例如:检查服务是否存在“父服务”,如果父服务还没有部署,则提示先需要部署父服务
}
return $serviceArr;
}
/**
* 修改挂载目录
* @return array
*/
public function serviceDeployMounts($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$appArr = $vars['appArr'];
$swarmArr = $vars['swarmArr'];
$mountsArr = $vars['mounts'];
$serviceType = $vars['serviceType'];
#自定义代码
{
#print_r($mountsArr);
}
return $mountsArr;
}
/**
* 修改服务容器的环境变量
* @return array
*/
public function serviceDeployDockerEnvArr($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$envArr = $vars['envArr'];
#自定义代码
{
#print_r($envArr);
}
return $envArr;
}
/**
* 服务部署完成后的相关处理
* @return array
*/
public function serviceCheckAllScriptSuccessful($plugin, $hook, $vars, $pluginType, $moduleName) {
$serviceArr = $vars['serviceArr'];
$appArr = $vars['appArr'];
$serviceId = $serviceArr['id'];
#自定义代码
{
#当本服务部署成功后,再部署名称为“service001”的服务
{
$otherServiceObj = $this->getModel('service')->select('id')->where('name', 'service001')->first();
if ($otherServiceObj) {
#重新部署服务
$this->service->sendDeployServiceCron($otherServiceObj->id);
}
}
#执行脚本
{
list($serviceArr, $appArr, $nodeArr) = $this->getModel('service')->getMergeArr($serviceId, [
'serviceArr', 'appArr', 'nodeArr',
]);
#主机中执行脚本
{
$shellResult = $this->shell->runAgentShell([
'#shell script',
'echo WSY_EXEC_OK'
], $nodeArr);
if (strstr($shellResult, 'WSY_EXEC_OK')) {
#执行成功
} else {
#执行失败
}
}
#在容器中执行脚本(单机应用)
{
list($_, $shellResult) = $this->shell->runShellInContainer([
'#shell script',
'echo WSY_EXEC_OK'
], $nodeArr, $serviceArr['name']);
if (strstr($shellResult, 'WSY_EXEC_OK')) {
#执行成功
} else {
#执行失败
}
}
#在容器中执行脚本(如果服务存在多个容器,则只在“某一个”容器中执行)
{
list($_, $shellResult) = $this->shell->runShellByServiceId($serviceId, [
'#shell script',
'echo WSY_EXEC_OK'
], $nodeArr);
if (strstr($shellResult, 'WSY_EXEC_OK')) {
#执行成功
} else {
#执行失败
}
}
}
#当本服务部署成功后,重新部署其子服务
{
$subServiceIds = $this->getModel('service')->select('id')
->where('linkServiceId', $serviceId)
->pluck('id'); #请参考laravel语法
if ($subServiceIds) {
foreach ($subServiceIds as $subServiceIdOne) {
#第二个参数表示不必部署集群,第三个参数表示强制部署子服务
$this->service->sendDeployServiceCron($subServiceIdOne, false, true);
}
}
}
}
#返回
return $serviceArr;
}
}