U - 主机管理 docker连接地址已不再必填 #18

1.x
雷二猛 2019-10-28 13:12:30 +08:00
parent cc368c2c7f
commit 1d6f3e66c1
3 changed files with 31 additions and 22 deletions

View File

@ -37,7 +37,8 @@ def get():
@blueprint.route('/', methods=['POST'])
@require_permission('assets_host_add')
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()
if error is None:
host = Host(**form)
@ -59,7 +60,8 @@ def delete(host_id):
@blueprint.route('/<int:host_id>', methods=['PUT'])
@require_permission('assets_host_edit')
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()
if error is None:
host = Host.query.get_or_404(host_id)
@ -75,10 +77,11 @@ def get_valid(host_id):
if not Setting.has('ssh_private_key'):
utils.generate_and_save_ssh_key()
if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
try:
sync_host_info(host_id, cli.docker_uri)
except DockerException:
return json_response(message='docker fail')
if cli.docker_uri:
try:
sync_host_info(host_id, cli.docker_uri)
except DockerException:
return json_response(message='docker fail')
else:
return json_response(message='ssh fail')
return json_response()
@ -92,10 +95,11 @@ def post_valid(host_id):
cli = Host.query.get_or_404(host_id)
ssh.add_public_key(cli.ssh_ip, cli.ssh_port, form.secret)
if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
try:
sync_host_info(host_id, cli.docker_uri)
except DockerException:
return json_response(message='获取扩展信息失败请检查docker是否可以正常连接')
if cli.docker_uri:
try:
sync_host_info(host_id, cli.docker_uri)
except DockerException:
return json_response(message='获取扩展信息失败请检查docker是否可以正常连接')
else:
return json_response(message='验证失败!')
return json_response(message=error)
@ -139,7 +143,7 @@ def host_import():
def sync_host_info(host_id, uri):
host_info = DockerClient(base_url=uri).docker_info()
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')
# outer_ip = 1
# inner_ip = 2

View File

@ -75,6 +75,7 @@ def ssh_ping(hostname, port):
hostname,
port=port,
username='root',
timeout=5,
pkey=RSAKey.from_private_key(StringIO(Setting.ssh_private_key)))
except AuthenticationException:
return False

View File

@ -33,7 +33,7 @@
<el-form-item label="备注信息"><span>{{ props.row.desc }}</span></el-form-item>
</el-form>
<el-row v-else style="text-align: center">
<span style="color: #99a9bf">暂没有配置信息点击验证自动获取...</span>
<span style="color: #99a9bf">暂没有配置信息点击验证自动获取需要配置docker连接地址</span>
</el-row>
</template>
</el-table-column>
@ -41,8 +41,12 @@
<el-table-column prop="name" 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="docker_uri" label="Docker连接" width="180"></el-table-column>
<el-table-column prop="ssh_ip" label="SSH连接"></el-table-column>
<el-table-column label="SSH连接">
<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')">
<template slot-scope="scope">
<el-button v-if="has_permission('assets_host_edit')" size="small" @click="handleEdit(scope.row)"></el-button>
@ -65,7 +69,7 @@
</el-pagination>
</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-tab-pane label="单条记录" name="first">
<el-form :model="form" label-width="80px">
@ -76,22 +80,22 @@
<el-button style="margin-left: 15px" type="text" @click="addZone"></el-button>
</el-form-item>
<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 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 label="Docker连接地址" prop="docker_uri" required>
<el-input v-model="form.docker_uri" placeholder="连接主机Docker的地址,例如:192.168.1.1:2375"></el-input>
<el-form-item label="Docker连接地址" prop="docker_uri">
<el-input v-model="form.docker_uri" placeholder="用于应用发布等与容器相关功能,例如:192.168.1.1:2375"></el-input>
</el-form-item>
<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 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 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>
</el-tab-pane>