|
@@ -9,28 +9,59 @@ import {
|
|
|
} from '@ant-design/pro-components'
|
|
|
import { Button, Col, message, Form } from 'antd'
|
|
|
import { useState } from 'react'
|
|
|
-import {testDataSourceConnection, createDataSource} from '../services'
|
|
|
+import {
|
|
|
+ testDataSourceConnection,
|
|
|
+ createDataSource,
|
|
|
+ uploadFile,
|
|
|
+} from '../services'
|
|
|
|
|
|
const DATA_TYPE_MYSQL = 'mysql'
|
|
|
const KERBS_VALID_FALSE = false
|
|
|
|
|
|
-export default function DatasourceAdd({updateDataSource}) {
|
|
|
+export default function DatasourceAdd({ updateDataSource }) {
|
|
|
// 数据源类型
|
|
|
const [dataType, setDataType] = useState(DATA_TYPE_MYSQL)
|
|
|
// 是否开启kerbsValid验证
|
|
|
const [kerbsValid, setKerbsValid] = useState(KERBS_VALID_FALSE)
|
|
|
+ const [kerberosServiceName, setKerberosServiceName] = useState('')
|
|
|
+ const [principal, setPrincipal] = useState(KERBS_VALID_FALSE)
|
|
|
// Loading状态
|
|
|
const [loading, setLoading] = useState(false)
|
|
|
+
|
|
|
+ const [keytabFile, setKeytabFile] = useState([])
|
|
|
+ const [krd5File, setKrd5File] = useState([])
|
|
|
// Form表单
|
|
|
const [form] = Form.useForm()
|
|
|
// 测试连接
|
|
|
const testConnect = async () => {
|
|
|
- const fields = ['datasource_name','datasource','database_name','jdbc_username','jdbc_password','jdbc_url','comments', 'tag']
|
|
|
+ const fields = [
|
|
|
+ 'datasource_name',
|
|
|
+ 'datasource',
|
|
|
+ 'database_name',
|
|
|
+ 'jdbc_username',
|
|
|
+ 'jdbc_password',
|
|
|
+ 'jdbc_url',
|
|
|
+ 'comments',
|
|
|
+ 'tag',
|
|
|
+ ]
|
|
|
try {
|
|
|
await form.validateFields(fields)
|
|
|
setLoading(true)
|
|
|
const testData = form.getFieldsValue(fields)
|
|
|
- const { data } = await testDataSourceConnection({...testData, tag: form.getFieldValue('tag').join('/')})
|
|
|
+ const params = {
|
|
|
+ ...testData,
|
|
|
+ tag: form.getFieldValue('tag').join('/'),
|
|
|
+ }
|
|
|
+ params['kerberos'] = kerbsValid ? 1 : 0
|
|
|
+ if (kerbsValid) {
|
|
|
+ const keytab = await uploadKerbFile(keytabFile)
|
|
|
+ const krb5config = await uploadKerbFile(krd5File)
|
|
|
+ params['keytab'] = keytab
|
|
|
+ params['krb5config'] = krb5config
|
|
|
+ params['kerberos_service_name'] = kerberosServiceName
|
|
|
+ params['principal'] = principal
|
|
|
+ }
|
|
|
+ const { data } = await testDataSourceConnection(params)
|
|
|
if (data.data) {
|
|
|
message.success('连接成功')
|
|
|
} else {
|
|
@@ -43,8 +74,30 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
}
|
|
|
// 完成添加
|
|
|
const finishAdd = async () => {
|
|
|
- const fields = ['datasource_name','datasource','database_name','jdbc_username','jdbc_password','jdbc_url','comments', 'tag']
|
|
|
- const { data } = await createDataSource({...form.getFieldsValue(fields), tag: form.getFieldValue('tag').join('/')})
|
|
|
+ const fields = [
|
|
|
+ 'datasource_name',
|
|
|
+ 'datasource',
|
|
|
+ 'database_name',
|
|
|
+ 'jdbc_username',
|
|
|
+ 'jdbc_password',
|
|
|
+ 'jdbc_url',
|
|
|
+ 'comments',
|
|
|
+ 'tag',
|
|
|
+ ]
|
|
|
+ const params = {
|
|
|
+ ...form.getFieldsValue(fields),
|
|
|
+ tag: form.getFieldValue('tag').join('/'),
|
|
|
+ }
|
|
|
+ params['kerberos'] = kerbsValid ? 1 : 0
|
|
|
+ if (kerbsValid) {
|
|
|
+ const keytab = await uploadKerbFile(keytabFile)
|
|
|
+ const krb5config = await uploadKerbFile(krd5File)
|
|
|
+ params['keytab'] = keytab
|
|
|
+ params['krb5config'] = krb5config
|
|
|
+ params['kerberos_service_name'] = kerberosServiceName
|
|
|
+ params['principal'] = principal
|
|
|
+ }
|
|
|
+ const { data } = await createDataSource(params)
|
|
|
if (data.code === 200) {
|
|
|
message.success('添加成功')
|
|
|
updateDataSource()
|
|
@@ -53,23 +106,66 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
+ const uploadKerbFile = async fileList => {
|
|
|
+ const file = new FormData()
|
|
|
+ fileList.forEach(item => {
|
|
|
+ file.append('file', item)
|
|
|
+ })
|
|
|
+ file.append('project_id', 'test')
|
|
|
+ file.append('file_type', 'kerberos')
|
|
|
+ const { data } = await uploadFile(file)
|
|
|
+ let uri = ''
|
|
|
+ if (data.code === 200) {
|
|
|
+ uri = data.data
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ return uri
|
|
|
+ }
|
|
|
// 测试连接按钮
|
|
|
const testConnectBtn = (
|
|
|
<Button onClick={testConnect} loading={loading}>
|
|
|
测试连接
|
|
|
</Button>
|
|
|
)
|
|
|
+
|
|
|
+ //上传文件配置
|
|
|
+ const keytabUpProps = {
|
|
|
+ onRemove: file => {
|
|
|
+ const index = keytabFile.indexOf(file)
|
|
|
+ const newFileList = keytabFile.slice()
|
|
|
+ newFileList.splice(index, 1)
|
|
|
+ setKeytabFile(newFileList)
|
|
|
+ },
|
|
|
+ beforeUpload: file => {
|
|
|
+ setKeytabFile([...keytabFile, file])
|
|
|
+ return false
|
|
|
+ },
|
|
|
+ keytabFile,
|
|
|
+ }
|
|
|
+
|
|
|
+ const krd5UpProps = {
|
|
|
+ onRemove: file => {
|
|
|
+ const index = krd5File.indexOf(file)
|
|
|
+ const newFileList = krd5File.slice()
|
|
|
+ newFileList.splice(index, 1)
|
|
|
+ setKrd5File(newFileList)
|
|
|
+ },
|
|
|
+ beforeUpload: file => {
|
|
|
+ setKrd5File([...krd5File, file])
|
|
|
+ return false
|
|
|
+ },
|
|
|
+ krd5File,
|
|
|
+ }
|
|
|
return (
|
|
|
<ModalForm
|
|
|
form={form}
|
|
|
- trigger={
|
|
|
- <Button type="primary">添加数据源</Button>
|
|
|
- }
|
|
|
+ trigger={<Button type="primary">添加数据源</Button>}
|
|
|
onFinish={finishAdd}
|
|
|
initialValues={{
|
|
|
datasource: DATA_TYPE_MYSQL,
|
|
|
kerbsValid: KERBS_VALID_FALSE,
|
|
|
- comments: ''
|
|
|
+ comments: '',
|
|
|
}}
|
|
|
title="添加数据源"
|
|
|
modalProps={{
|
|
@@ -121,12 +217,12 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
label="数据源标签"
|
|
|
name="tag"
|
|
|
fieldProps={{
|
|
|
- mode: 'tags'
|
|
|
+ mode: 'tags',
|
|
|
}}
|
|
|
valueEnum={{
|
|
|
- '线上': '线上',
|
|
|
- '测试': '测试',
|
|
|
- '开发': '开发',
|
|
|
+ 线上: '线上',
|
|
|
+ 测试: '测试',
|
|
|
+ 开发: '开发',
|
|
|
}}
|
|
|
rules={[
|
|
|
{
|
|
@@ -160,7 +256,7 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
name="jdbc_username"
|
|
|
rules={[
|
|
|
{
|
|
|
- required: true,
|
|
|
+ required: !kerbsValid ? true : false,
|
|
|
message: '请输入用户名!',
|
|
|
},
|
|
|
]}
|
|
@@ -170,7 +266,7 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
name="jdbc_password"
|
|
|
rules={[
|
|
|
{
|
|
|
- required: true,
|
|
|
+ required: !kerbsValid ? true : false,
|
|
|
message: '请输入密码!',
|
|
|
},
|
|
|
]}
|
|
@@ -182,8 +278,8 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
/>
|
|
|
{dataType === 'hive' ? (
|
|
|
<ProFormRadio.Group
|
|
|
- label="kerbs验证"
|
|
|
- name="kerbsValid"
|
|
|
+ label="kerberos验证"
|
|
|
+ name="kerberosValid"
|
|
|
fieldProps={{
|
|
|
onChange: e => setKerbsValid(e.target.value),
|
|
|
}}
|
|
@@ -211,25 +307,38 @@ export default function DatasourceAdd({updateDataSource}) {
|
|
|
{dataType === 'hive' && kerbsValid ? (
|
|
|
<>
|
|
|
<ProFormUploadButton
|
|
|
- label="keytab"
|
|
|
+ label="keytab文件"
|
|
|
name="keytab"
|
|
|
- action="upload.do"
|
|
|
title="上传keyTabPath"
|
|
|
+ fieldProps={{ ...keytabUpProps }}
|
|
|
max={1}
|
|
|
/>
|
|
|
<Col span={12} />
|
|
|
<ProFormUploadButton
|
|
|
- label="krd5config"
|
|
|
- name="krd5config"
|
|
|
- action="upload.do"
|
|
|
- title="上传kard5config"
|
|
|
+ label="krb5config文件"
|
|
|
+ name="krb5config"
|
|
|
+ title="上传krb5config"
|
|
|
+ fieldProps={{ ...krd5UpProps }}
|
|
|
max={1}
|
|
|
/>
|
|
|
<Col span={12} />
|
|
|
+ <ProFormText
|
|
|
+ label="kerberos_service_name"
|
|
|
+ name="kerberos_service_name"
|
|
|
+ placeholder="输入kerberos_service_name"
|
|
|
+ fieldProps={{
|
|
|
+ onChange: e => setKerberosServiceName(e.target.value),
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <Col span={12} />
|
|
|
<ProFormText
|
|
|
label="Principal"
|
|
|
name="principal"
|
|
|
- placeholder="ylaiuser@EMR-56L6ZNTS"></ProFormText>
|
|
|
+ placeholder="ylaiuser@EMR-56L6ZNTS"
|
|
|
+ fieldProps={{
|
|
|
+ onChange: e => setPrincipal(e.target.value),
|
|
|
+ }}
|
|
|
+ />
|
|
|
</>
|
|
|
) : (
|
|
|
<></>
|