Files
EdgeAdmin/web/views/@default/clusters/cluster/createNode.js

230 lines
5.2 KiB
JavaScript
Raw Normal View History

2020-09-06 16:19:34 +08:00
Tea.context(function () {
2021-08-14 18:06:24 +08:00
this.nodeId = 0
this.node = {}
this.sshHost = ""
this.sshPort = ""
this.grantId = 0
this.step = "info"
2022-11-27 22:00:35 +08:00
this.name = ""
2021-08-14 18:06:24 +08:00
this.success = function (resp) {
this.node = resp.data.node
this.nodeId = this.node.id
this.sshHost = this.node.login.params.host
if (this.node.login.params.port > 0) {
this.sshPort = this.node.login.params.port
}
if (this.node.addresses.length > 0) {
this.sshHost = this.node.addresses[0]
}
this.step = "install"
this.$delay(function () {
this.$refs.installSSHHostRef.focus()
this.$refs.nodeLoginSuggestPortsRef.reload(this.sshHost)
})
}
2024-07-27 15:42:58 +08:00
this.secondaryClusters = []
this.secondaryClusterIds = this.secondaryClusters.map(function (v) {
return v.id
})
this.addSecondary = function () {
let that = this
let selectedClusterIds = [this.clusterId].concat(this.secondaryClusterIds)
teaweb.popup("/clusters/selectPopup?selectedClusterIds=" + selectedClusterIds.join(",") + "&mode=multiple", {
height: "30em",
width: "50em",
callback: function (resp) {
if (resp.data.cluster != null) {
that.secondaryClusterIds.push(resp.data.cluster.id)
that.secondaryClusters.push(resp.data.cluster)
}
}
})
}
this.removeSecondary = function (index) {
this.secondaryClusterIds.$remove(index)
this.secondaryClusters.$remove(index)
}
2021-08-14 18:06:24 +08:00
/**
* 安装
*/
this.isInstalled = false
this.installMethod = "remote" // remote | manual
this.isInstalling = false
this.switchInstallMethod = function (method) {
this.installMethod = method
}
2024-07-27 15:42:58 +08:00
2021-08-14 18:06:24 +08:00
this.selectSSHHost = function (host) {
this.sshHost = host
this.changeSSHHost()
}
this.changeSSHHost = function () {
if (this.$refs.nodeLoginSuggestPortsRef != null) {
this.$refs.nodeLoginSuggestPortsRef.reload(this.sshHost)
}
}
this.selectLoginPort = function (port) {
this.sshPort = port
}
this.autoSelectLoginPort = function (port) {
if (this.sshPort == null || this.sshPort <= 0) {
this.sshPort = port
}
}
this.install = function () {
if (this.node.grant != null) {
this.grantId = this.node.grant.id
}
this.isInstalling = true
this.$post(".createNodeInstall")
.params({
nodeId: this.node.id,
sshHost: this.sshHost,
sshPort: this.sshPort,
grantId: this.grantId
})
.timeout(30)
.success(function () {
this.$delay(function () {
this.isInstalling = true
this.reloadStatus(this.node.id)
})
})
.done(function () {
this.isInstalling = false
})
}
this.changeGrant = function (grant) {
if (grant != null) {
this.grantId = grant.id
} else {
this.grantId = 0
}
}
// 刷新状态
this.installStatus = null
this.reloadStatus = function (nodeId) {
let that = this
this.$post("/clusters/cluster/node/status")
.params({
nodeId: nodeId
})
.success(function (resp) {
this.installStatus = resp.data.installStatus
this.node.isInstalled = resp.data.isInstalled
if (this.node.isInstalled) {
this.isInstalling = false
this.isInstalled = true
this.finish()
}
if (!this.isInstalling) {
return
}
let nodeId = this.node.id
let errMsg = this.installStatus.error
if (this.installStatus.errorCode.length > 0 || errMsg.length > 0) {
this.isInstalling = false
}
switch (this.installStatus.errorCode) {
case "EMPTY_LOGIN":
case "EMPTY_SSH_HOST":
case "EMPTY_SSH_PORT":
case "EMPTY_GRANT":
teaweb.warn("需要填写SSH登录信息", function () {
teaweb.popup("/clusters/cluster/updateNodeSSH?nodeId=" + nodeId, {
height: "30em",
callback: function () {
that.install()
}
})
})
return
case "SSH_LOGIN_FAILED":
teaweb.warn("SSH登录失败请检查设置")
return
case "CREATE_ROOT_DIRECTORY_FAILED":
teaweb.warn("创建根目录失败,请检查目录权限或者手工创建:" + errMsg)
return
case "INSTALL_HELPER_FAILED":
teaweb.warn("安装助手失败:" + errMsg)
return
case "TEST_FAILED":
teaweb.warn("环境测试失败:" + errMsg)
return
case "RPC_TEST_FAILED":
teaweb.confirm("html:要安装的节点到API服务之间的RPC通讯测试失败具体错误" + errMsg + "<br/>现在修改API信息", function () {
window.location = "/settings/api"
2021-08-14 18:06:24 +08:00
})
return
default:
shouldReload = true
//teaweb.warn("安装失败:" + errMsg)
}
})
.done(function () {
this.$delay(function () {
this.reloadStatus(nodeId)
}, 1000)
});
}
/**
* 完成
*/
this.finish = function () {
this.step = "finish"
}
this.createNext = function () {
teaweb.reload()
}
2022-11-27 22:00:35 +08:00
this.defaultIP = ""
this.changeName = function () {
let matchIP = this.name.match(/(\d{1,3}\.){3}\d{1,3}/)
if (matchIP != null) {
if (this.validateIP(matchIP[0])) {
this.defaultIP = matchIP[0]
} else {
this.defaultIP = ""
}
2022-11-27 22:00:35 +08:00
}
}
this.validateIP = function (v) {
// 目前只支持ipv4
let pieces = v.split(".")
if (pieces.length != 4) {
return false
}
for (let i = 0; i < pieces.length; i++) {
if (!/^\d{1,3}$/.test(pieces[i])) {
return false
}
let p = parseInt(pieces[i], 10)
if (p > 255) {
return false
}
}
return true
}
2021-08-14 18:06:24 +08:00
})