mirror of https://github.com/openspug/spug
U - 主机管理 docker连接地址已不再必填 #18
parent
cc368c2c7f
commit
1d6f3e66c1
|
@ -37,7 +37,8 @@ def get():
|
||||||
@blueprint.route('/', methods=['POST'])
|
@blueprint.route('/', methods=['POST'])
|
||||||
@require_permission('assets_host_add')
|
@require_permission('assets_host_add')
|
||||||
def post():
|
def post():
|
||||||
form, error = JsonParser('name', 'type', 'zone', 'docker_uri', 'ssh_ip', 'ssh_port',
|
form, error = JsonParser('name', 'type', 'zone', 'ssh_ip', 'ssh_port',
|
||||||
|
Argument('docker_uri', nullable=True, required=False),
|
||||||
Argument('desc', nullable=True, required=False)).parse()
|
Argument('desc', nullable=True, required=False)).parse()
|
||||||
if error is None:
|
if error is None:
|
||||||
host = Host(**form)
|
host = Host(**form)
|
||||||
|
@ -59,7 +60,8 @@ def delete(host_id):
|
||||||
@blueprint.route('/<int:host_id>', methods=['PUT'])
|
@blueprint.route('/<int:host_id>', methods=['PUT'])
|
||||||
@require_permission('assets_host_edit')
|
@require_permission('assets_host_edit')
|
||||||
def put(host_id):
|
def put(host_id):
|
||||||
form, error = JsonParser('name', 'type', 'zone', 'docker_uri', 'ssh_ip', 'ssh_port',
|
form, error = JsonParser('name', 'type', 'zone', 'ssh_ip', 'ssh_port',
|
||||||
|
Argument('docker_uri', nullable=True, required=False),
|
||||||
Argument('desc', nullable=True, required=False)).parse()
|
Argument('desc', nullable=True, required=False)).parse()
|
||||||
if error is None:
|
if error is None:
|
||||||
host = Host.query.get_or_404(host_id)
|
host = Host.query.get_or_404(host_id)
|
||||||
|
@ -75,10 +77,11 @@ def get_valid(host_id):
|
||||||
if not Setting.has('ssh_private_key'):
|
if not Setting.has('ssh_private_key'):
|
||||||
utils.generate_and_save_ssh_key()
|
utils.generate_and_save_ssh_key()
|
||||||
if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
|
if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
|
||||||
try:
|
if cli.docker_uri:
|
||||||
sync_host_info(host_id, cli.docker_uri)
|
try:
|
||||||
except DockerException:
|
sync_host_info(host_id, cli.docker_uri)
|
||||||
return json_response(message='docker fail')
|
except DockerException:
|
||||||
|
return json_response(message='docker fail')
|
||||||
else:
|
else:
|
||||||
return json_response(message='ssh fail')
|
return json_response(message='ssh fail')
|
||||||
return json_response()
|
return json_response()
|
||||||
|
@ -92,10 +95,11 @@ def post_valid(host_id):
|
||||||
cli = Host.query.get_or_404(host_id)
|
cli = Host.query.get_or_404(host_id)
|
||||||
ssh.add_public_key(cli.ssh_ip, cli.ssh_port, form.secret)
|
ssh.add_public_key(cli.ssh_ip, cli.ssh_port, form.secret)
|
||||||
if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
|
if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
|
||||||
try:
|
if cli.docker_uri:
|
||||||
sync_host_info(host_id, cli.docker_uri)
|
try:
|
||||||
except DockerException:
|
sync_host_info(host_id, cli.docker_uri)
|
||||||
return json_response(message='获取扩展信息失败,请检查docker是否可以正常连接!')
|
except DockerException:
|
||||||
|
return json_response(message='获取扩展信息失败,请检查docker是否可以正常连接!')
|
||||||
else:
|
else:
|
||||||
return json_response(message='验证失败!')
|
return json_response(message='验证失败!')
|
||||||
return json_response(message=error)
|
return json_response(message=error)
|
||||||
|
@ -139,7 +143,7 @@ def host_import():
|
||||||
def sync_host_info(host_id, uri):
|
def sync_host_info(host_id, uri):
|
||||||
host_info = DockerClient(base_url=uri).docker_info()
|
host_info = DockerClient(base_url=uri).docker_info()
|
||||||
operate_system = host_info.get('OperatingSystem')
|
operate_system = host_info.get('OperatingSystem')
|
||||||
memory = math.ceil(int(host_info.get('MemTotal'))/1024/1024/1024)
|
memory = math.ceil(int(host_info.get('MemTotal')) / 1024 / 1024 / 1024)
|
||||||
cpu = host_info.get('NCPU')
|
cpu = host_info.get('NCPU')
|
||||||
# outer_ip = 1
|
# outer_ip = 1
|
||||||
# inner_ip = 2
|
# inner_ip = 2
|
||||||
|
|
|
@ -75,6 +75,7 @@ def ssh_ping(hostname, port):
|
||||||
hostname,
|
hostname,
|
||||||
port=port,
|
port=port,
|
||||||
username='root',
|
username='root',
|
||||||
|
timeout=5,
|
||||||
pkey=RSAKey.from_private_key(StringIO(Setting.ssh_private_key)))
|
pkey=RSAKey.from_private_key(StringIO(Setting.ssh_private_key)))
|
||||||
except AuthenticationException:
|
except AuthenticationException:
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
<el-form-item label="备注信息"><span>{{ props.row.desc }}</span></el-form-item>
|
<el-form-item label="备注信息"><span>{{ props.row.desc }}</span></el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row v-else style="text-align: center">
|
<el-row v-else style="text-align: center">
|
||||||
<span style="color: #99a9bf">暂没有配置信息,点击验证自动获取...</span>
|
<span style="color: #99a9bf">暂没有配置信息,点击验证自动获取,需要配置docker连接地址</span>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -41,8 +41,12 @@
|
||||||
<el-table-column prop="name" label="主机名称"></el-table-column>
|
<el-table-column prop="name" label="主机名称"></el-table-column>
|
||||||
<el-table-column prop="zone" label="所属区域"></el-table-column>
|
<el-table-column prop="zone" label="所属区域"></el-table-column>
|
||||||
<el-table-column prop="type" label="类型"></el-table-column>
|
<el-table-column prop="type" label="类型"></el-table-column>
|
||||||
<el-table-column prop="docker_uri" label="Docker连接" width="180"></el-table-column>
|
<el-table-column label="SSH连接">
|
||||||
<el-table-column prop="ssh_ip" label="SSH连接"></el-table-column>
|
<template slot-scope="scope">
|
||||||
|
{{scope.row['ssh_ip']}}:{{scope.row['ssh_port']}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="desc" label="备注"></el-table-column>
|
||||||
<el-table-column label="操作" width="240px" v-if="has_permission('assets_host_edit|assets_host_del|assets_host_valid')">
|
<el-table-column label="操作" width="240px" v-if="has_permission('assets_host_edit|assets_host_del|assets_host_valid')">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button v-if="has_permission('assets_host_edit')" size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
<el-button v-if="has_permission('assets_host_edit')" size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
||||||
|
@ -65,7 +69,7 @@
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-dialog :title="title" :visible.sync="dialogVisible" width="80%" :close-on-click-modal="false">
|
<el-dialog visible :title="title" v-if="dialogVisible" width="80%" :close-on-click-modal="false">
|
||||||
<el-tabs v-model="activeName" >
|
<el-tabs v-model="activeName" >
|
||||||
<el-tab-pane label="单条记录" name="first">
|
<el-tab-pane label="单条记录" name="first">
|
||||||
<el-form :model="form" label-width="80px">
|
<el-form :model="form" label-width="80px">
|
||||||
|
@ -76,22 +80,22 @@
|
||||||
<el-button style="margin-left: 15px" type="text" @click="addZone">添加区域</el-button>
|
<el-button style="margin-left: 15px" type="text" @click="addZone">添加区域</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="主机类型" prop="type" required>
|
<el-form-item label="主机类型" prop="type" required>
|
||||||
<el-input v-model="form.type"></el-input>
|
<el-input v-model="form.type" placeholder="主机的类型,例如:web-server"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="主机名称" prop="name" required>
|
<el-form-item label="主机名称" prop="name" required>
|
||||||
<el-input v-model="form.name"></el-input>
|
<el-input v-model="form.name" placeholder="主机唯一标识,例如:web-01"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Docker连接地址" prop="docker_uri" required>
|
<el-form-item label="Docker连接地址" prop="docker_uri">
|
||||||
<el-input v-model="form.docker_uri" placeholder="连接主机Docker的地址,例如:192.168.1.1:2375"></el-input>
|
<el-input v-model="form.docker_uri" placeholder="用于应用发布等与容器相关功能,例如:192.168.1.1:2375"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="SSH地址" prop="ssh_ip" required>
|
<el-form-item label="SSH地址" prop="ssh_ip" required>
|
||||||
<el-input v-model="form.ssh_ip" placeholder="连接主机的SSH地址,例如:192.168.1.1"></el-input>
|
<el-input v-model="form.ssh_ip" placeholder="连接主机的SSH地址,例如:192.168.1.1"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="SSH端口" prop="ssh_ip" required>
|
<el-form-item label="SSH端口" prop="ssh_ip" required>
|
||||||
<el-input v-model="form.ssh_port"></el-input>
|
<el-input v-model="form.ssh_port" placeholder="主机的SSH端口,例如:22"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="备注信息" prop="outer_ip">
|
<el-form-item label="备注信息" prop="outer_ip">
|
||||||
<el-input v-model="form.desc" type="textarea" autosize></el-input>
|
<el-input v-model="form.desc" type="textarea" autosize placeholder="额外备注信息"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
Loading…
Reference in New Issue