@@ -9,6 +9,7 @@ trigger: | |||||
event: | event: | ||||
- push | - push | ||||
- pull_request | - pull_request | ||||
steps: | steps: | ||||
- name: 代码检查 | - name: 代码检查 | ||||
image: golangci/golangci-lint:v1.40.1 | image: golangci/golangci-lint:v1.40.1 | ||||
@@ -17,7 +18,6 @@ steps: | |||||
GOPROXY: https://goproxy.cn,direct | GOPROXY: https://goproxy.cn,direct | ||||
commands: | commands: | ||||
- make lint | - make lint | ||||
--- | --- | ||||
kind: pipeline | kind: pipeline | ||||
name: base-server | name: base-server | ||||
@@ -1,9 +0,0 @@ | |||||
Describe what this PR does / why we need it | |||||
Does this pull request fix one issue? | |||||
Describe how you did it. | |||||
Describe how to verify it. | |||||
Special notes for reviews. |
@@ -139,7 +139,7 @@ lint_init: | |||||
golangci-lint version | golangci-lint version | ||||
lint: lint_init | lint: lint_init | ||||
cd ./server && golangci-lint run ./... | |||||
cd ./server && go mod download && golangci-lint run ./... | |||||
common_lint: lint_init | common_lint: lint_init | ||||
cd ./server/common && golangci-lint run ./... | cd ./server/common && golangci-lint run ./... | ||||
@@ -114,4 +114,20 @@ export function updateUserConfig(userId,params) { | |||||
} | } | ||||
}) | }) | ||||
} | } | ||||
// 创建minio账户 | |||||
export function createMinIOAccount(userId,data) { | |||||
return request({ | |||||
url: `/v1/usermanage/user/${userId}/minioaccount`, | |||||
method: 'put', | |||||
data | |||||
}) | |||||
} | |||||
// 创建minio桶 | |||||
export function createMinIOBucket(userId,data) { | |||||
return request({ | |||||
url: `/v1/usermanage/user/${userId}/miniobuckets`, | |||||
method: 'put', | |||||
data | |||||
}) | |||||
} | |||||
@@ -6,7 +6,7 @@ | |||||
<el-row class="demo-avatar demo-basic"> | <el-row class="demo-avatar demo-basic"> | ||||
<el-dropdown> | <el-dropdown> | ||||
<i class="el-icon-document" style="color:#666699;"></i> | <i class="el-icon-document" style="color:#666699;"></i> | ||||
<a href="https://octopus.openi.org.cn/docs/management/intro" target="_blank" class="manual">管理手册</a> | |||||
<a href="https://octopus.pcl.ac.cn/" target="_blank" class="manual">管理手册</a> | |||||
<i class="el-icon-service" style="color:#666699 ;"></i> | <i class="el-icon-service" style="color:#666699 ;"></i> | ||||
<a href="https://git.openi.org.cn/OpenI/octopus/issues" target="_blank" class="manual">问题意见</a> | <a href="https://git.openi.org.cn/OpenI/octopus/issues" target="_blank" class="manual">问题意见</a> | ||||
<el-dropdown-menu slot="dropdown" /> | <el-dropdown-menu slot="dropdown" /> | ||||
@@ -1,6 +1,6 @@ | |||||
<template> | <template> | ||||
<div> | <div> | ||||
<el-table :data="tableData" style="width: 100%;font-size: 15px" :header-cell-style="{'color':'black'}" | |||||
<el-table :data="tableData" style="width: 100%;font-size: 15px" :header-cell-style="{'text-align':'center','color':'black'}" | |||||
:span-method="listSpanMethod" :row-style="{height:'5px'}" :cell-style="{padding:'5px 0'}"> | :span-method="listSpanMethod" :row-style="{height:'5px'}" :cell-style="{padding:'5px 0'}"> | ||||
<el-table-column label="节点名字"> | <el-table-column label="节点名字"> | ||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
@@ -22,7 +22,7 @@ | |||||
<span>{{ scope.row.resourcePools }}</span> | <span>{{ scope.row.resourcePools }}</span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="节点信息" align="center"> | |||||
<el-table-column label="资源信息"> | |||||
<el-table-column label="名称"> | <el-table-column label="名称"> | ||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<span style="color: #409eff"> | <span style="color: #409eff"> | ||||
@@ -30,7 +30,7 @@ | |||||
</span> | </span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="使用量"> | |||||
<el-table-column label="已分配"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<span style="color: #409eff;"> | <span style="color: #409eff;"> | ||||
{{ scope.row.use }} | {{ scope.row.use }} | ||||
@@ -44,7 +44,7 @@ | |||||
</span> | </span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="使用百分比" align="center" width="120px"> | |||||
<el-table-column label="已分配百分比" width="120px"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<div class="circleBox" v-if="!scope.row.children"> | <div class="circleBox" v-if="!scope.row.children"> | ||||
<el-progress color="#409EFF" type="circle" :show-text="false" | <el-progress color="#409EFF" type="circle" :show-text="false" | ||||
@@ -3,36 +3,71 @@ | |||||
<div class="function"> | <div class="function"> | ||||
<el-button type="primary" @click="add">添加资源池</el-button> | <el-button type="primary" @click="add">添加资源池</el-button> | ||||
</div> | </div> | ||||
<el-table v-loading="isLoading" :data="tableData" style="width: 100%;font-size: 15px;" | |||||
:header-cell-style="{'text-align':'left','color':'black'}" :cell-style="{'text-align':'left'}"> | |||||
<el-table-column label="资源池名称" align="center"> | |||||
<el-table v-loading="isLoading" :data="tableData" style="width: 100%;font-size: 15px;" :span-method="listSpanMethod" | |||||
:header-cell-style="{'text-align':'center','color':'black'}" :cell-style="{'text-align':'left'}"> | |||||
<el-table-column label="资源池名称"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<span>{{ scope.row.name }}</span> | <span>{{ scope.row.name }}</span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="默认资源池" align="center"> | |||||
<el-table-column label="默认资源池"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<span>{{ scope.row.default?'是':'否' }}</span> | <span>{{ scope.row.default?'是':'否' }}</span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="描述" align="center"> | |||||
<el-table-column label="描述"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<span>{{ scope.row.desc }}</span> | <span>{{ scope.row.desc }}</span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="节点列表" align="center" show-overflow-tooltip> | |||||
<el-table-column label="节点列表" show-overflow-tooltip> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<span>{{ nodeList(scope.row.bindingNodes) }}</span> | <span>{{ nodeList(scope.row.bindingNodes) }}</span> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="资源规格" align="center"> | |||||
<el-table-column label="资源规格"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<el-button type="text" @click="handleDetail(scope.row)">详情</el-button> | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
<el-table-column label="资源信息"> | |||||
<el-table-column label="名称"> | |||||
<template slot-scope="scope"> | |||||
<span style="color: #409eff"> | |||||
{{ scope.row.childName }} | |||||
</span> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="已分配"> | |||||
<template slot-scope="scope"> | |||||
<span style="color: #409eff;"> | |||||
{{ scope.row.use }} | |||||
</span> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="总量"> | |||||
<template slot-scope="scope"> | |||||
<span style="color: #409eff;"> | |||||
{{ scope.row.total }} | |||||
</span> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="已分配百分比" width="120px"> | |||||
<template slot-scope="scope"> | |||||
<div class="circleBox" v-if="!scope.row.children"> | |||||
<el-progress color="#409EFF" type="circle" :show-text="false" | |||||
:percentage="scope.row.percentage" :width="60" :height="60"> | |||||
</el-progress> | |||||
<div class="circleCenter"> | |||||
<div style=" font-weight: bold; font-size: 12px;"> {{scope.row.percentage?scope.row.percentage:0}}%</div> | |||||
</div> | |||||
</div> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table-column> | |||||
<el-table-column label="操作"> | <el-table-column label="操作"> | ||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<el-button v-if="scope.row.default===false" type="text" @click="open(scope.row)">删除</el-button> | |||||
<el-button v-if="scope.row.default===false" type="text" @click="handleDeletePool(scope.row)">删除</el-button> | |||||
<el-button type="text" @click="handleEdit( scope.row)">编辑</el-button> | <el-button type="text" @click="handleEdit( scope.row)">编辑</el-button> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
@@ -106,6 +141,7 @@ | |||||
<script> | <script> | ||||
import { getResourcePool, deleteResourcePool, createResourcePool, updateResourcePool, getNodeList, getResource } from '@/api/resourceManager.js' | import { getResourcePool, deleteResourcePool, createResourcePool, updateResourcePool, getNodeList, getResource } from '@/api/resourceManager.js' | ||||
import { formatSize } from '@/utils/index.js' | |||||
export default { | export default { | ||||
name: "ResourcePool", | name: "ResourcePool", | ||||
data() { | data() { | ||||
@@ -157,6 +193,88 @@ | |||||
clearInterval(this.timer); | clearInterval(this.timer); | ||||
}, | }, | ||||
methods: { | methods: { | ||||
listSpanMethod({ row, column, rowIndex, columnIndex }) { | |||||
if (columnIndex < 5 || columnIndex > 8) { | |||||
if (row.span_num > 0) { | |||||
return { | |||||
rowspan: row.span_num, | |||||
colspan: 1 | |||||
}; | |||||
} | |||||
else { | |||||
return { rowspan: 0, colspan: 0 } | |||||
} | |||||
} | |||||
}, | |||||
handleTableData(data) { | |||||
let arr = []; | |||||
let on = 0; | |||||
let spanNum = 0; | |||||
for (let i = 0; i < data.length; i++) { | |||||
let node_info = data[i].children | |||||
on++; | |||||
for (let j = 0; j < node_info.length; j++) { | |||||
let info = { | |||||
on: on, | |||||
span_num: j === 0 ? node_info.length : 0, | |||||
childName: node_info[j].childName, | |||||
use: node_info[j].use, | |||||
total: node_info[j].total, | |||||
percentage: node_info[j].percentage, | |||||
name: data[i].name, | |||||
default: data[i].default, | |||||
desc: data[i].desc, | |||||
bindingNodes: data[i].bindingNodes, | |||||
mapResourceSpecIdList: data[i].mapResourceSpecIdList, | |||||
id: data[i].id, | |||||
} | |||||
arr.push(info) | |||||
} | |||||
} | |||||
return arr | |||||
}, | |||||
getDetail(val) { | |||||
let data = [] | |||||
if (Object.getOwnPropertyNames(val.resourceAllocated).length && Object.getOwnPropertyNames(val.resourceCapacity).length) { | |||||
for (const key1 in val.resourceAllocated) { | |||||
for (const key2 in val.resourceCapacity) { | |||||
if (key1 === key2) { | |||||
let percentage | |||||
if (parseInt(val.resourceAllocated[key1]) === 0) { | |||||
0 | |||||
} else if ((/^\d+$/.test(val.resourceAllocated[key1])) && (/^\d+$/.test(val.resourceCapacity[key1]))) { | |||||
percentage = val.resourceAllocated[key1] / val.resourceCapacity[key1] * 100 | |||||
percentage = parseFloat(percentage.toFixed(2)) | |||||
} else { | |||||
percentage = formatSize(val.resourceAllocated[key1]) / formatSize(val.resourceCapacity[key1]) | |||||
percentage = percentage * 100 | |||||
percentage = parseFloat(percentage.toFixed(2)) | |||||
} | |||||
data.push({ childName: key1, use: val.resourceAllocated[key1], total: val.resourceCapacity[key1], percentage: percentage}) | |||||
} | |||||
} | |||||
} | |||||
} else { | |||||
data.push( | |||||
{ | |||||
childName: "cpu", | |||||
id: "", | |||||
percentage: 0, | |||||
total: "0", | |||||
use: "0" | |||||
}, | |||||
{ | |||||
childName: "memory", | |||||
id: "", | |||||
percentage: 0, | |||||
total: "0", | |||||
use: "0" | |||||
}, | |||||
) | |||||
} | |||||
return data | |||||
}, | |||||
handleDetail(val) { | handleDetail(val) { | ||||
this.detailDialog = true | this.detailDialog = true | ||||
const mapResourceSpecIdList = JSON.parse(JSON.stringify(val.mapResourceSpecIdList)) | const mapResourceSpecIdList = JSON.parse(JSON.stringify(val.mapResourceSpecIdList)) | ||||
@@ -315,8 +433,17 @@ | |||||
getResourcePool().then(response => { | getResourcePool().then(response => { | ||||
if (response.success) { | if (response.success) { | ||||
if (response.data !== null && response.data.resourcePools !== null) { | if (response.data !== null && response.data.resourcePools !== null) { | ||||
this.tableData = response.data.resourcePools | |||||
this.isLoading = false | this.isLoading = false | ||||
response.data.resourcePools.forEach( | |||||
item => { | |||||
// item.id = Math.random() | |||||
if (this.getDetail(item) !== []) { | |||||
item.children = this.getDetail(item) | |||||
} | |||||
else { item.children = [] } | |||||
} | |||||
) | |||||
this.tableData = this.handleTableData(response.data.resourcePools) | |||||
} else { | } else { | ||||
this.tableData = [] | this.tableData = [] | ||||
} | } | ||||
@@ -362,7 +489,7 @@ | |||||
}) | }) | ||||
}, | }, | ||||
// 删除确认 | // 删除确认 | ||||
open(val) { | |||||
handleDeletePool(val) { | |||||
this.$confirm('此操作将永久删除该资源规格, 是否继续?', '提示', { | this.$confirm('此操作将永久删除该资源规格, 是否继续?', '提示', { | ||||
confirmButtonText: '确定', | confirmButtonText: '确定', | ||||
cancelButtonText: '取消', | cancelButtonText: '取消', | ||||
@@ -411,4 +538,15 @@ | |||||
.item { | .item { | ||||
margin: 5px; | margin: 5px; | ||||
} | } | ||||
.circleBox { | |||||
position: relative; | |||||
text-align: center; | |||||
top:20px | |||||
} | |||||
.circleCenter { | |||||
position: relative; | |||||
top: -45px; | |||||
} | |||||
</style> | </style> |
@@ -174,8 +174,8 @@ | |||||
} | } | ||||
}); | }); | ||||
}, | }, | ||||
handleDelete(row) { | |||||
deleteResource(row.id).then(response => { | |||||
deleteRes(val) { | |||||
deleteResource(val.id).then(response => { | |||||
if (response.success) { | if (response.success) { | ||||
this.$message({ | this.$message({ | ||||
message: '删除成功', | message: '删除成功', | ||||
@@ -190,6 +190,21 @@ | |||||
} | } | ||||
}) | }) | ||||
}, | }, | ||||
handleDelete(row) { | |||||
this.$confirm('此操作将永久删除该资源规格, 是否继续?', '提示', { | |||||
confirmButtonText: '确定', | |||||
cancelButtonText: '取消', | |||||
type: 'warning' | |||||
}).then(() => { | |||||
this.deleteRes(row) | |||||
}).catch(() => { | |||||
this.$message({ | |||||
type: 'info', | |||||
message: '已取消删除' | |||||
}); | |||||
}); | |||||
}, | |||||
add() { | add() { | ||||
this.ruleForm = {} | this.ruleForm = {} | ||||
this.flag = true | this.flag = true | ||||
@@ -0,0 +1,107 @@ | |||||
<template> | |||||
<div> | |||||
<el-dialog | |||||
title="minio用户信息" | |||||
width="35%" | |||||
:visible.sync="CreateFormVisible" | |||||
:before-close="handleDialogClose" | |||||
:close-on-click-modal="false" | |||||
> | |||||
<el-form :model="ruleForm" :rules="rules" ref="ruleForm"> | |||||
<el-form-item label="minio用户名称" prop="minioUserName" :label-width="formLabelWidth"> | |||||
<el-input v-model="ruleForm.minioUserName" placeholder="请填写账号" :disabled="isShow" minlength="3" maxlength="20" show-word-limit/> | |||||
</el-form-item> | |||||
<el-form-item label="minio账户密码" prop="minioPassword" :label-width="formLabelWidth"> | |||||
<el-input v-model="ruleForm.minioPassword" show-password placeholder="请输入密码" minlength="8" maxlength="40" show-word-limit /> | |||||
</el-form-item> | |||||
</el-form> | |||||
<div slot="footer" class="dialog-footer"> | |||||
<el-button @click="cancel">取 消</el-button> | |||||
<el-button type="primary" @click="submit">确 定</el-button> | |||||
</div> | |||||
</el-dialog> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import { createMinIOAccount } from "@/api/userManager.js" | |||||
export default { | |||||
name: "minioAccount", | |||||
props: { | |||||
row: { | |||||
type: Object, | |||||
default: () => { } | |||||
} | |||||
}, | |||||
data() { | |||||
// var checkName = (rule, value, callback) => { | |||||
// const regName = /^[a-zA-Z][0-9a-zA-Z_]{3,30}$/; | |||||
// if (regName.test(value)) { | |||||
// return callback(); | |||||
// } | |||||
// callback(new Error("账号由字母开头,长度4-30个字符,允许字母数字下划线")); | |||||
// }; | |||||
return { | |||||
isShow: false, | |||||
CreateFormVisible: true, | |||||
formLabelWidth: '120px', | |||||
ruleForm: { | |||||
minioUserName: "", | |||||
minioPassword: "" | |||||
}, | |||||
rules: { | |||||
minioUserName: [ | |||||
{ required: true, message: "请输入账号", trigger: "blur" }, | |||||
{ min: 3, max: 20, message: '名称长度在3-20个字符', trigger: 'blur' } | |||||
], minioPassword: [ | |||||
{ required: true, message: '请输入密码!', trigger: 'blur' }, | |||||
{ min: 8, max: 40, message: '密码长度在8-40位之间', trigger: 'blur' } | |||||
] | |||||
}, | |||||
} | |||||
}, | |||||
created () { | |||||
if (this.row.minioUserName) { | |||||
this.ruleForm.minioUserName = this.row.minioUserName | |||||
this.isShow = true | |||||
} | |||||
}, | |||||
methods: { | |||||
handleDialogClose() { | |||||
this.$emit('close', false) | |||||
}, | |||||
cancel() { | |||||
this.$emit('cancel', false) | |||||
}, | |||||
submit() { | |||||
this.$refs.ruleForm.validate(valid => { | |||||
if (valid) { | |||||
const params = { | |||||
minioUserName: this.ruleForm.minioUserName, | |||||
minioPassword: this.ruleForm.minioPassword | |||||
} | |||||
const userId = this.row.id | |||||
createMinIOAccount(userId,params).then((response) => { | |||||
if (response.success) { | |||||
this.$message.success("创建成功") | |||||
this.ruleForm.minioPassword = '' | |||||
this.isShow = true | |||||
this.$emit('confirm', false) | |||||
} else { | |||||
this.$message({ | |||||
message: this.getErrorMsg( | |||||
response.error.subcode | |||||
), | |||||
type: "warning" | |||||
}) | |||||
} | |||||
}) | |||||
} else { | |||||
console.log('error') | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> |
@@ -0,0 +1,108 @@ | |||||
<template> | |||||
<div> | |||||
<el-dialog | |||||
title="可读写minio桶" | |||||
width="35%" | |||||
:visible.sync="CreateFormVisible" | |||||
:before-close="handleDialogClose" | |||||
:close-on-click-modal="false" | |||||
> | |||||
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="60px"> | |||||
<el-form-item label="名称" prop="buckets"> | |||||
<div v-for="(item, index) in ruleForm.buckets" :key="index"> | |||||
<el-input v-model="ruleForm.buckets[index]" style="width: 60%;margin-bottom:10px" /> | |||||
<i class="el-icon-delete" @click="deleteItem(index)"></i> | |||||
</div> | |||||
<el-button type="primary" @click="addItem">增加</el-button> | |||||
</el-form-item> | |||||
</el-form> | |||||
<div slot="footer" class="dialog-footer"> | |||||
<el-button type="primary" @click="submit" v-preventReClick>提交</el-button> | |||||
<el-button @click="cancel">取消</el-button> | |||||
</div> | |||||
</el-dialog> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import { createMinIOBucket } from "@/api/userManager.js" | |||||
export default { | |||||
name: "minioBuckets", | |||||
props: { | |||||
row: { | |||||
type: Object, | |||||
default: () => { } | |||||
} | |||||
}, | |||||
data () { | |||||
var checkName = (rule, value, callback) => { | |||||
// const regName = /^[a-z][0-9a-z]{3,}$/; | |||||
const regName = /^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/; | |||||
for(let i = 0; i < value.length; i++) { | |||||
if (!regName.test(value[i])) { | |||||
callback(new Error("小写字母或数字开头结尾,3-63个字符,允许小写字母、数字、'-'和'.'")); | |||||
} | |||||
} | |||||
return callback(); | |||||
}; | |||||
return { | |||||
CreateFormVisible: true, | |||||
ruleForm: { | |||||
buckets: [], | |||||
}, | |||||
rules: { | |||||
buckets: [ | |||||
{required: true, message: '请输入minio桶的名称', trigger: 'blur'}, | |||||
{ validator: checkName, trigger: "blur" } | |||||
] | |||||
} | |||||
} | |||||
}, | |||||
created () { | |||||
if(this.row.buckets) { | |||||
this.ruleForm.buckets = this.row.buckets | |||||
} | |||||
}, | |||||
methods: { | |||||
handleDialogClose() { | |||||
this.$emit('close', false) | |||||
}, | |||||
addItem() { | |||||
this.ruleForm.buckets.push("") | |||||
}, | |||||
deleteItem(index) { | |||||
this.ruleForm.buckets.splice(index, 1) | |||||
}, | |||||
cancel() { | |||||
this.$emit('cancel', false) | |||||
}, | |||||
submit() { | |||||
this.$refs.ruleForm.validate(valid => { | |||||
if (valid) { | |||||
const params = { | |||||
buckets: this.ruleForm.buckets, | |||||
} | |||||
const userId = this.row.id | |||||
createMinIOBucket(userId,params).then((response) => { | |||||
if (response.success) { | |||||
this.$message.success("创建成功") | |||||
this.ruleForm.minioPassword = '' | |||||
this.isShow = true | |||||
this.$emit('confirm', false) | |||||
} else { | |||||
this.$message({ | |||||
message: this.getErrorMsg( | |||||
response.error.subcode | |||||
), | |||||
type: "warning" | |||||
}) | |||||
} | |||||
}) | |||||
} else { | |||||
console.log('error') | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> |
@@ -65,6 +65,8 @@ | |||||
<el-button v-if="group" type="text" @click="handleEdit(scope.row)">编辑</el-button> | <el-button v-if="group" type="text" @click="handleEdit(scope.row)">编辑</el-button> | ||||
<!-- <el-button @click="handleDelete(scope.row)" type="text" v-if="group">删除</el-button> --> | <!-- <el-button @click="handleDelete(scope.row)" type="text" v-if="group">删除</el-button> --> | ||||
<el-button type="text" @click="handleDetail(scope.row)">{{ user?'所属群组':'用户列表' }}</el-button> | <el-button type="text" @click="handleDetail(scope.row)">{{ user?'所属群组':'用户列表' }}</el-button> | ||||
<el-button v-if="user" type="text" @click="handleMinioUserDialog(scope.row)">minio用户</el-button> | |||||
<el-button v-if="user" type="text" @click="handleMinioBucketDialog(scope.row)">minio桶</el-button> | |||||
<!-- <el-button v-if="user" type="text" @click="handleUserConfig(scope.row)">用户配置</el-button> --> | <!-- <el-button v-if="user" type="text" @click="handleUserConfig(scope.row)">用户配置</el-button> --> | ||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
@@ -79,6 +81,12 @@ | |||||
<!-- 创修改信息对话框 --> | <!-- 创修改信息对话框 --> | ||||
<operateDialog v-if="operateVisible" :row="row" :user-type="change" @cancel="cancel" @confirm="confirm" | <operateDialog v-if="operateVisible" :row="row" :user-type="change" @cancel="cancel" @confirm="confirm" | ||||
@close="close" :type='type'/> | @close="close" :type='type'/> | ||||
<!-- 创建minio账户 --> | |||||
<minioAccount v-if="minioUserDialogVisible" :row="row" @cancel="cancel" @confirm="confirm" | |||||
@close="close" /> | |||||
<!-- 创建minio桶 --> | |||||
<minioBuckets v-if="minioBucketDialogVisible" :row="row" @cancel="cancel" @confirm="confirm" | |||||
@close="close" /> | |||||
<!-- 用户配置对话框 --> | <!-- 用户配置对话框 --> | ||||
<userConfig v-if="userConfigVisible" :conKey="conKey" :conValue="conValue" :row="row" @cancel="cancel" | <userConfig v-if="userConfigVisible" :conKey="conKey" :conValue="conValue" :row="row" @cancel="cancel" | ||||
@confirm="confirm" @close="close"> | @confirm="confirm" @close="close"> | ||||
@@ -109,6 +117,8 @@ | |||||
import { getResourcePool } from '@/api/resourceManager.js' | import { getResourcePool } from '@/api/resourceManager.js' | ||||
import { getUserConfigKey, getUserConfig } from '@/api/userManager.js' | import { getUserConfigKey, getUserConfig } from '@/api/userManager.js' | ||||
import operateDialog from "./components/operateDialog.vue"; | import operateDialog from "./components/operateDialog.vue"; | ||||
import minioAccount from "./components/minioAccount.vue"; | |||||
import minioBuckets from "./components/minioBuckets.vue"; | |||||
import addDialog from "./components/addDialog.vue"; | import addDialog from "./components/addDialog.vue"; | ||||
import userConfig from "./components/userConfig.vue"; | import userConfig from "./components/userConfig.vue"; | ||||
import userEdit from "./components/userEdit.vue"; | import userEdit from "./components/userEdit.vue"; | ||||
@@ -120,13 +130,17 @@ | |||||
addDialog, | addDialog, | ||||
searchForm, | searchForm, | ||||
userConfig, | userConfig, | ||||
userEdit | |||||
userEdit, | |||||
minioAccount, | |||||
minioBuckets | |||||
}, | }, | ||||
props: { | props: { | ||||
userTabType: { type: Number, default: undefined } | userTabType: { type: Number, default: undefined } | ||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
minioUserDialogVisible: false, | |||||
minioBucketDialogVisible: false, | |||||
tableData: [], | tableData: [], | ||||
row: {}, | row: {}, | ||||
CreateVisible: false, | CreateVisible: false, | ||||
@@ -185,6 +199,14 @@ | |||||
this.timer = null; | this.timer = null; | ||||
}, | }, | ||||
methods: { | methods: { | ||||
handleMinioUserDialog(row) { | |||||
this.row = row | |||||
this.minioUserDialogVisible = true | |||||
}, | |||||
handleMinioBucketDialog(row) { | |||||
this.row = row | |||||
this.minioBucketDialogVisible = true | |||||
}, | |||||
handleUserEdit(row) { | handleUserEdit(row) { | ||||
this.row = row | this.row = row | ||||
getResourcePool().then(response => { | getResourcePool().then(response => { | ||||
@@ -306,6 +328,8 @@ | |||||
this.operateVisible = val | this.operateVisible = val | ||||
this.userConfigVisible = val | this.userConfigVisible = val | ||||
this.userEdit = val | this.userEdit = val | ||||
this.minioUserDialogVisible = val | |||||
this.minioBucketDialogVisible = val | |||||
this.getList(this.searchData) | this.getList(this.searchData) | ||||
}, | }, | ||||
confirm(val) { | confirm(val) { | ||||
@@ -313,6 +337,8 @@ | |||||
this.operateVisible = val | this.operateVisible = val | ||||
this.userConfigVisible = val | this.userConfigVisible = val | ||||
this.userEdit = val | this.userEdit = val | ||||
this.minioUserDialogVisible = val | |||||
this.minioBucketDialogVisible = val | |||||
this.timer = setTimeout(this.getList, 500) | this.timer = setTimeout(this.getList, 500) | ||||
}, | }, | ||||
@@ -321,6 +347,8 @@ | |||||
this.operateVisible = val | this.operateVisible = val | ||||
this.userConfigVisible = val | this.userConfigVisible = val | ||||
this.userEdit = val | this.userEdit = val | ||||
this.minioUserDialogVisible = val | |||||
this.minioBucketDialogVisible = val | |||||
this.getList(this.searchData) | this.getList(this.searchData) | ||||
}, | }, | ||||
create() { | create() { | ||||
@@ -38,14 +38,14 @@ module.exports = { | |||||
}, | }, | ||||
proxy: { | proxy: { | ||||
[process.env.VUE_APP_BASE_API]: { | [process.env.VUE_APP_BASE_API]: { | ||||
target: 'http://192.168.202.73', | |||||
target: 'http://192.168.202.71/', | |||||
changeOrigin: true, | changeOrigin: true, | ||||
pathRewrite: { | pathRewrite: { | ||||
['^' + process.env.VUE_APP_BASE_API]: '/adminserver' | ['^' + process.env.VUE_APP_BASE_API]: '/adminserver' | ||||
} | } | ||||
}, | }, | ||||
[process.env.VUE_APP_BASE_API2]: { | [process.env.VUE_APP_BASE_API2]: { | ||||
target: 'http://192.168.202.73', | |||||
target: 'http://192.168.202.71/', | |||||
changeOrigin: true, | changeOrigin: true, | ||||
pathRewrite: { | pathRewrite: { | ||||
['^' + process.env.VUE_APP_BASE_API]: '' | ['^' + process.env.VUE_APP_BASE_API]: '' | ||||
@@ -566,7 +566,7 @@ octopus.pcl.ac.cn/resource: {{ .Values.common.resourceTagValuePrefix }}_{{ inclu | |||||
{{- end -}} | {{- end -}} | ||||
{{- define "minio.serviceAddr" -}} | {{- define "minio.serviceAddr" -}} | ||||
{{- printf "%s:%s" (include "minio.serviceName" .) .Values.minio.service.port -}} | |||||
{{- printf "%s:%s" (include "minio.serviceName" .) .Values.minio.service.ports.api -}} | |||||
{{- end -}} | {{- end -}} | ||||
{{/******************mysql******************/}} | {{/******************mysql******************/}} | ||||
@@ -51,7 +51,7 @@ spec: | |||||
mountPath: /etc/localtime | mountPath: /etc/localtime | ||||
env: | env: | ||||
- name: URLS | - name: URLS | ||||
value: "[{url:\"{{ .Values.ingress.apidocPath }}/admin.swagger.json\",name:\"admin\"},{url:\"{{ .Values.ingress.apidocPath }}/openai.swagger.json\",name:\"openai\"}]" | |||||
value: "[{url:\"{{ .Values.ingress.apidocPath }}/openai.swagger.json\",name:\"计算平台API\"},{url:\"{{ .Values.ingress.apidocPath }}/admin.swagger.json\",name:\"管理后台API\"}]" | |||||
ports: | ports: | ||||
- name: http | - name: http | ||||
containerPort: {{ template "apidoc.targetPort" . }} | containerPort: {{ template "apidoc.targetPort" . }} | ||||
@@ -0,0 +1,74 @@ | |||||
{{- if .Values.ascend.enabled }} | |||||
apiVersion: apps/v1 | |||||
kind: DaemonSet | |||||
metadata: | |||||
name: ascend-device-plugin-daemonset | |||||
namespace: kube-system | |||||
spec: | |||||
selector: | |||||
matchLabels: | |||||
name: ascend-device-plugin-ds | |||||
updateStrategy: | |||||
type: RollingUpdate | |||||
template: | |||||
metadata: | |||||
annotations: | |||||
scheduler.alpha.kubernetes.io/critical-pod: "" | |||||
seccomp.security.alpha.kubernetes.io/pod: runtime/default | |||||
labels: | |||||
name: ascend-device-plugin-ds | |||||
spec: | |||||
tolerations: | |||||
- key: CriticalAddonsOnly | |||||
operator: Exists | |||||
- key: huawei.com/Ascend910 | |||||
operator: Exists | |||||
effect: NoSchedule | |||||
- key: "device-plugin" | |||||
operator: "Equal" | |||||
value: "v2" | |||||
effect: NoSchedule | |||||
priorityClassName: "system-node-critical" | |||||
nodeSelector: | |||||
hardware-type: ASCENDNPU | |||||
containers: | |||||
- image: swr.cn-south-1.myhuaweicloud.com/openioctopus/ascend-k8sdeviceplugin:v3.0.RC1 | |||||
name: device-plugin-01 | |||||
resources: | |||||
requests: | |||||
memory: 500Mi | |||||
cpu: 500m | |||||
limits: | |||||
memory: 500Mi | |||||
cpu: 500m | |||||
command: [ "/bin/bash", "-c", "--"] | |||||
args: [ "device-plugin -useAscendDocker=true | |||||
-logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0" ] | |||||
securityContext: | |||||
privileged: true | |||||
readOnlyRootFilesystem: true | |||||
imagePullPolicy: IfNotPresent | |||||
volumeMounts: | |||||
- name: device-plugin | |||||
mountPath: /var/lib/kubelet/device-plugins | |||||
- name: hiai-driver | |||||
mountPath: /usr/local/Ascend/driver | |||||
- name: log-path | |||||
mountPath: /var/log/mindx-dl/devicePlugin | |||||
- name: tmp | |||||
mountPath: /tmp | |||||
volumes: | |||||
- name: device-plugin | |||||
hostPath: | |||||
path: /var/lib/kubelet/device-plugins | |||||
- name: hiai-driver | |||||
hostPath: | |||||
path: /usr/local/Ascend/driver | |||||
- name: log-path | |||||
hostPath: | |||||
path: /var/log/mindx-dl/devicePlugin | |||||
type: Directory | |||||
- name: tmp | |||||
hostPath: | |||||
path: /tmp | |||||
{{- end }} |
@@ -157,7 +157,6 @@ data: | |||||
resourceLabelKey: {{ .Values.common.resourceTagKey }} | resourceLabelKey: {{ .Values.common.resourceTagKey }} | ||||
billingPeriodSec: {{ .Values.baseserver.service.billingPeriodSec }} | billingPeriodSec: {{ .Values.baseserver.service.billingPeriodSec }} | ||||
develop: | develop: | ||||
jpyBaseUrlEnv: OCTOPUS_JPY_BASE_URL | |||||
autoStopIntervalSec: {{ .Values.baseserver.service.develop.autoStopIntervalSec }} | autoStopIntervalSec: {{ .Values.baseserver.service.develop.autoStopIntervalSec }} | ||||
isSetUploadFileSize: {{ .Values.baseserver.service.develop.isSetUploadFileSize }} | isSetUploadFileSize: {{ .Values.baseserver.service.develop.isSetUploadFileSize }} | ||||
resource: | resource: | ||||
@@ -12,6 +12,7 @@ | |||||
# See the License for the specific language governing permissions and | # See the License for the specific language governing permissions and | ||||
# limitations under the License. | # limitations under the License. | ||||
{{- if .Values.cambricon.enabled }} | |||||
apiVersion: apps/v1 | apiVersion: apps/v1 | ||||
kind: DaemonSet | kind: DaemonSet | ||||
metadata: | metadata: | ||||
@@ -23,34 +24,47 @@ spec: | |||||
name: cambricon-device-plugin-ds | name: cambricon-device-plugin-ds | ||||
template: | template: | ||||
metadata: | metadata: | ||||
# Mark this pod as a critical add-on; when enabled, the critical add-on scheduler | |||||
# reserves resources for critical add-on pods so that they can be rescheduled after | |||||
# a failure. This annotation works in tandem with the toleration below. | |||||
# This annotation is deprecated. Kept here for backward compatibility | |||||
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ | |||||
annotations: | annotations: | ||||
scheduler.alpha.kubernetes.io/critical-pod: "" | scheduler.alpha.kubernetes.io/critical-pod: "" | ||||
labels: | labels: | ||||
name: cambricon-device-plugin-ds | name: cambricon-device-plugin-ds | ||||
spec: | spec: | ||||
# Mark this pod as a critical add-on; when enabled, the critical add-on | |||||
# scheduler reserves resources for critical add-on pods so that they can | |||||
# be rescheduled after a failure. | |||||
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ | |||||
priorityClassName: "system-node-critical" | |||||
tolerations: | tolerations: | ||||
# Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. | |||||
# This, along with the annotation above marks this pod as a critical add-on. | |||||
# This toleration is deprecated. Kept here for backward compatibility | |||||
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ | |||||
- key: CriticalAddonsOnly | - key: CriticalAddonsOnly | ||||
operator: Exists | operator: Exists | ||||
- key: cambricon.com/mlu | - key: cambricon.com/mlu | ||||
operator: Exists | operator: Exists | ||||
effect: NoSchedule | effect: NoSchedule | ||||
#serviceAccount: cambricon-device-plugin # uncomment to add rbac | |||||
nodeSelector: | |||||
hardware-type: CAMBRICONMLU | |||||
containers: | containers: | ||||
- image: cambricon-k8s-device-plugin:v1.1.1 | |||||
- image: {{ .Values.cambricon.mluDevicePluginImage }} | |||||
name: cambricon-device-plugin-ctr | name: cambricon-device-plugin-ctr | ||||
command: | command: | ||||
- /usr/bin/k8s-device-plugin | - /usr/bin/k8s-device-plugin | ||||
args: | args: | ||||
- -mode | |||||
- default # switch mode here | |||||
- --mode=default #device plugin mode: default, sriov, env-share, mlu-share or topology-aware | |||||
- --virtualization-num=1 # virtualization number for each MLU, used only in sriov mode or env-share mode | |||||
- --mlulink-policy=best-effort # MLULink topology policy: best-effort, guaranteed or restricted, used only in topology-aware mode | |||||
- --cnmon-path=/usr/bin/cnmon # host machine cnmon path, must be absolute path. comment out this line to avoid mounting cnmon. | |||||
#- --enable-console #uncomment to enable UART console device(/dev/ttyMS) in container | |||||
#- --disable-health-check #uncomment to disable health check | |||||
#- --enable-device-type #uncomment to enable device registration with type info | |||||
env: | env: | ||||
# change this if env-share mode or sriov mode is enabled. | |||||
- name: VIRTUALIZATION_NUM | |||||
value: "0" | |||||
- name: NODE_NAME | |||||
valueFrom: | |||||
fieldRef: | |||||
fieldPath: spec.nodeName | |||||
securityContext: | securityContext: | ||||
privileged: true | privileged: true | ||||
volumeMounts: | volumeMounts: | ||||
@@ -67,3 +81,4 @@ spec: | |||||
- name: sys | - name: sys | ||||
hostPath: | hostPath: | ||||
path: /sys | path: /sys | ||||
{{- end }} |
@@ -110,7 +110,7 @@ spec: | |||||
paths: | paths: | ||||
- backend: | - backend: | ||||
serviceName: {{ $minioName }} | serviceName: {{ $minioName }} | ||||
servicePort: {{ .Values.minio.service.port }} | |||||
servicePort: {{ .Values.minio.service.ports.console }} | |||||
path: {{ $minioWebPath }} | path: {{ $minioWebPath }} | ||||
--- | --- | ||||
@@ -135,7 +135,7 @@ spec: | |||||
paths: | paths: | ||||
- backend: | - backend: | ||||
serviceName: {{ $minioName }} | serviceName: {{ $minioName }} | ||||
servicePort: {{ .Values.minio.service.port }} | |||||
servicePort: {{ .Values.minio.service.ports.api}} | |||||
path: {{ $minioApiPath }}(/|$)(.*) | path: {{ $minioApiPath }}(/|$)(.*) | ||||
--- | --- | ||||
@@ -0,0 +1,70 @@ | |||||
# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
{{- if .Values.nvidia.enabled }} | |||||
apiVersion: apps/v1 | |||||
kind: DaemonSet | |||||
metadata: | |||||
name: nvidia-device-plugin-daemonset | |||||
namespace: kube-system | |||||
spec: | |||||
selector: | |||||
matchLabels: | |||||
name: nvidia-device-plugin-ds | |||||
updateStrategy: | |||||
type: RollingUpdate | |||||
template: | |||||
metadata: | |||||
# This annotation is deprecated. Kept here for backward compatibility | |||||
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ | |||||
annotations: | |||||
scheduler.alpha.kubernetes.io/critical-pod: "" | |||||
labels: | |||||
name: nvidia-device-plugin-ds | |||||
spec: | |||||
nodeSelector: | |||||
hardware-type: NVIDIAGPU | |||||
tolerations: | |||||
# This toleration is deprecated. Kept here for backward compatibility | |||||
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ | |||||
- key: CriticalAddonsOnly | |||||
operator: Exists | |||||
- key: nvidia.com/gpu | |||||
operator: Exists | |||||
effect: NoSchedule | |||||
# Mark this pod as a critical add-on; when enabled, the critical add-on | |||||
# scheduler reserves resources for critical add-on pods so that they can | |||||
# be rescheduled after a failure. | |||||
# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ | |||||
priorityClassName: "system-node-critical" | |||||
containers: | |||||
- image: nvcr.io/nvidia/k8s-device-plugin:v0.9.0 | |||||
name: nvidia-device-plugin-ctr | |||||
args: ["--fail-on-init-error=false","--mig-strategy=mixed"] | |||||
env: | |||||
- name: NVIDIA_MIG_MONITOR_DEVICES | |||||
value: all | |||||
securityContext: | |||||
allowPrivilegeEscalation: false | |||||
capabilities: | |||||
drop: ["ALL"] | |||||
add: ["SYS_ADMIN"] | |||||
volumeMounts: | |||||
- name: device-plugin | |||||
mountPath: /var/lib/kubelet/device-plugins | |||||
volumes: | |||||
- name: device-plugin | |||||
hostPath: | |||||
path: /var/lib/kubelet/device-plugins | |||||
{{- end }} |
@@ -374,6 +374,59 @@ spec: | |||||
--- | --- | ||||
apiVersion: apps/v1 | apiVersion: apps/v1 | ||||
kind: DaemonSet | kind: DaemonSet | ||||
metadata: | |||||
name: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
spec: | |||||
selector: | |||||
matchLabels: | |||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-mlu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | |||||
template: | |||||
metadata: | |||||
name: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
labels: | |||||
{{ include "prometheus.common-labels" . | indent 8 }} | |||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-mlu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | |||||
spec: | |||||
nodeSelector: | |||||
hardware-type: CAMBRICONMLU | |||||
containers: | |||||
- image: {{ .Values.cambricon.mluExporterImage }} | |||||
imagePullPolicy: IfNotPresent #Always | |||||
name: pod-cambricon-mlu-metrics-exporter | |||||
command: | |||||
- /usr/bin/mlu-exporter | |||||
args: | |||||
- --metrics-config=/etc/mlu-exporter/metrics.yaml | |||||
- --metrics-path=/metrics | |||||
- --port=9400 | |||||
- --collector=cndev | |||||
- --collector=podresources | |||||
- --metrics-prefix=mlu | |||||
resources: | |||||
requests: | |||||
memory: 100Mi | |||||
cpu: 100m | |||||
limits: | |||||
memory: 2000Mi | |||||
cpu: 2000m | |||||
securityContext: | |||||
privileged: true | |||||
volumeMounts: | |||||
- mountPath: /var/lib/kubelet/pod-resources/ | |||||
name: pod-resources | |||||
hostPID: true | |||||
hostIPC: true | |||||
volumes: | |||||
- name: pod-resources | |||||
hostPath: | |||||
path: /var/lib/kubelet/pod-resources/ | |||||
--- | |||||
apiVersion: apps/v1 | |||||
kind: DaemonSet | |||||
metadata: | metadata: | ||||
name: {{ template "prometheus.fullname" . }}-npu-exporter | name: {{ template "prometheus.fullname" . }}-npu-exporter | ||||
spec: | spec: | ||||
@@ -393,10 +446,10 @@ spec: | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | ||||
spec: | spec: | ||||
nodeSelector: | nodeSelector: | ||||
workerselector: dls-worker-node | |||||
hardware-type: ASCENDNPU | |||||
containers: | containers: | ||||
- name: huawei-npu-exporter | - name: huawei-npu-exporter | ||||
image: 192.168.202.110:5000/octopus/npu-exporter:v2.0.2 | |||||
image: swr.cn-south-1.myhuaweicloud.com/openioctopus/npu-exporter:v3.0.RC1 | |||||
resources: | resources: | ||||
requests: | requests: | ||||
memory: 1000Mi | memory: 1000Mi | ||||
@@ -404,7 +457,7 @@ spec: | |||||
limits: | limits: | ||||
memory: 1000Mi | memory: 1000Mi | ||||
cpu: 1000m | cpu: 1000m | ||||
imagePullPolicy: Never | |||||
imagePullPolicy: IfNotPresent | |||||
command: [ "/bin/bash", "-c", "--"] | command: [ "/bin/bash", "-c", "--"] | ||||
# NOTE: enable HTTPS needs to use | # NOTE: enable HTTPS needs to use | ||||
# ./cert-importer -certFile=../cert/rsa_aes.crt -keyFile=../cert/rsa_aes_private.key to import certificate | # ./cert-importer -certFile=../cert/rsa_aes.crt -keyFile=../cert/rsa_aes_private.key to import certificate | ||||
@@ -507,6 +560,30 @@ spec: | |||||
--- | --- | ||||
kind: Service | kind: Service | ||||
apiVersion: v1 | apiVersion: v1 | ||||
metadata: | |||||
labels: | |||||
{{ include "prometheus.common-labels" . | indent 4 }} | |||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-npu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-npu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | |||||
annotations: | |||||
prometheus.io/port: "8082" | |||||
prometheus.io/path: "/metrics" | |||||
prometheus.io/scrape: "true" | |||||
name: {{ template "prometheus.fullname" . }}-npu-exporter | |||||
spec: | |||||
type: NodePort | |||||
ports: | |||||
- port: 8082 | |||||
targetPort: 8082 | |||||
nodePort: 30401 | |||||
selector: | |||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-npu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-npu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | |||||
--- | |||||
kind: Service | |||||
apiVersion: v1 | |||||
metadata: | metadata: | ||||
labels: | labels: | ||||
{{ include "prometheus.common-labels" . | indent 4 }} | {{ include "prometheus.common-labels" . | indent 4 }} | ||||
@@ -534,21 +611,22 @@ apiVersion: v1 | |||||
metadata: | metadata: | ||||
labels: | labels: | ||||
{{ include "prometheus.common-labels" . | indent 4 }} | {{ include "prometheus.common-labels" . | indent 4 }} | ||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-npu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-npu-exporter | |||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-mlu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | ||||
annotations: | annotations: | ||||
prometheus.io/port: "8082" | |||||
prometheus.io/port: "9400" | |||||
prometheus.io/path: "/metrics" | prometheus.io/path: "/metrics" | ||||
prometheus.io/scrape: "true" | prometheus.io/scrape: "true" | ||||
name: {{ template "prometheus.fullname" . }}-npu-exporter | |||||
name: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
spec: | spec: | ||||
type: NodePort | type: NodePort | ||||
ports: | ports: | ||||
- port: 8082 | |||||
targetPort: 8082 | |||||
nodePort: 30401 | |||||
- port: 9400 | |||||
targetPort: 9400 | |||||
nodePort: 30403 | |||||
selector: | selector: | ||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-npu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-npu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | |||||
app.kubernetes.io/name: {{ template "prometheus.name" . }}-mlu-exporter | |||||
app.kubernetes.io/instance: {{ template "prometheus.fullname" . }}-mlu-exporter | |||||
app.kubernetes.io/part-of: {{ template "prometheus.name" . }} | |||||
@@ -268,8 +268,12 @@ minio: | |||||
existingClaim: "octopus-minio-pvc" | existingClaim: "octopus-minio-pvc" | ||||
service: | service: | ||||
type: NodePort | type: NodePort | ||||
nodePort: "31311" | |||||
port: "9000" | |||||
ports: | |||||
api: "9000" | |||||
console: "9001" | |||||
nodePorts: | |||||
api: "31311" | |||||
console: "31312" | |||||
nodeSelector: | nodeSelector: | ||||
<<: *nodeSelector | <<: *nodeSelector | ||||
affinity: | affinity: | ||||
@@ -498,4 +502,17 @@ rdma: | |||||
enflame: | enflame: | ||||
enabled: false | enabled: false | ||||
gcuDevicePluginImage: 192.168.202.110:5000/octopus/enflame-gcu-k8s-device-plugin:v1.0.0-dev | gcuDevicePluginImage: 192.168.202.110:5000/octopus/enflame-gcu-k8s-device-plugin:v1.0.0-dev | ||||
gcuExporterImage: 192.168.202.110:5000/octopus/enflame-gcu-exporter:v1.0.1-dev | |||||
gcuExporterImage: 192.168.202.110:5000/octopus/enflame-gcu-exporter:v1.0.1-dev | |||||
cambricon: | |||||
enabled: false | |||||
mluDevicePluginImage: swr.cn-south-1.myhuaweicloud.com/openioctopus/cambricon-k8s-device-plugin:v1.3.6 | |||||
mluExporterImage: swr.cn-south-1.myhuaweicloud.com/openioctopus/cambricon-mlu-exporter:v1.6.7 | |||||
nvidia: | |||||
# nvidia节点需要打标签hardware-type=NVIDIAGPU | |||||
enabled: true | |||||
ascend: | |||||
# ascend节点需要打标签hardware-type=ASCENDNPU | |||||
enabled: false |
@@ -240,7 +240,15 @@ enflame_gcu_label() { | |||||
echo -e "---------------------\033[31m enflame gcu label success \033[0m---------------------" | echo -e "---------------------\033[31m enflame gcu label success \033[0m---------------------" | ||||
} | } | ||||
# cambricon mlu节点打标签 | |||||
cambricon_mlu_label() { | |||||
set -e | |||||
echo -e "---------------------\033[31m cambricon mlu label \033[0m---------------------" | |||||
kubectl label nodes `hostname` hardware-type=CAMBRICONMLU | |||||
echo -e "---------------------\033[31m cambricon mlu label success \033[0m---------------------" | |||||
} | |||||
# huawei a910节点打标签 | # huawei a910节点打标签 | ||||
huawei_a910_label() { | huawei_a910_label() { | ||||
kubectl label nodes `hostname` a910-device-plugin=active | |||||
kubectl label nodes `hostname` hardware-type=ASCENDNPU | |||||
} | } |
@@ -118,6 +118,8 @@ main() { | |||||
huawei_a910_label | huawei_a910_label | ||||
elif [[ $node_type == "enflame_gcu" ]];then | elif [[ $node_type == "enflame_gcu" ]];then | ||||
enflame_gcu_label | enflame_gcu_label | ||||
elif [[ $node_type == "cambricon_mlu" ]];then | |||||
cambricon_mlu_label | |||||
fi | fi | ||||
# 验证 | # 验证 | ||||
@@ -86,6 +86,8 @@ main() { | |||||
huawei_a910_label | huawei_a910_label | ||||
elif [[ $node_type == "enflame_gcu" ]];then | elif [[ $node_type == "enflame_gcu" ]];then | ||||
enflame_gcu_label | enflame_gcu_label | ||||
elif [[ $node_type == "cambricon_mlu" ]];then | |||||
cambricon_mlu_label | |||||
fi | fi | ||||
} | } | ||||
@@ -61,3 +61,11 @@ alter table model_deploy modify res_spec_price decimal(10,2) null comment '资 | |||||
``` | ``` | ||||
## v4.2.6 | |||||
升级前: | |||||
1. v4.2.6已经将nvidia设备插件集成到章鱼安装包,需要先将原先的nvidia设备插件卸载 | |||||
``` | |||||
wget https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml | |||||
kubectl delete -f nvidia-device-plugin.yml | |||||
``` |
@@ -13,7 +13,7 @@ | |||||
<el-dropdown> | <el-dropdown> | ||||
<div v-show="!this.GLOBAL.THEME_MANUAL_INVISIBLE"> | <div v-show="!this.GLOBAL.THEME_MANUAL_INVISIBLE"> | ||||
<i class="el-icon-document" :style="{'color':fontColor?fontColor:'#666699'}" /> | <i class="el-icon-document" :style="{'color':fontColor?fontColor:'#666699'}" /> | ||||
<a href="https://octopus.openi.org.cn/docs/manual/intro" target="_blank" class="manual" | |||||
<a href="https://octopus.pcl.ac.cn/" target="_blank" class="manual" | |||||
:style="{'color':fontColor}">使用手册</a> | :style="{'color':fontColor}">使用手册</a> | ||||
<i class="el-icon-service" :style="{'color':fontColor?fontColor:'#666699'}" /> | <i class="el-icon-service" :style="{'color':fontColor?fontColor:'#666699'}" /> | ||||
<a href="https://git.openi.org.cn/OpenI/octopus/issues" target="_blank" class="manual" | <a href="https://git.openi.org.cn/OpenI/octopus/issues" target="_blank" class="manual" | ||||
@@ -138,18 +138,18 @@ export const constantRoutes = [ | |||||
} | } | ||||
] | ] | ||||
}, | }, | ||||
{ | |||||
path: '/cloudInterconnection', | |||||
component: Layout, | |||||
children: [ | |||||
{ | |||||
path: 'index', | |||||
name: 'cloudInterconnection', | |||||
component: () => import('@/views/cloudInterconnection/index'), | |||||
meta: { title: '云际互联', icon: 'cloudConnection' } | |||||
} | |||||
] | |||||
}, | |||||
// { | |||||
// path: '/cloudInterconnection', | |||||
// component: Layout, | |||||
// children: [ | |||||
// { | |||||
// path: 'index', | |||||
// name: 'cloudInterconnection', | |||||
// component: () => import('@/views/cloudInterconnection/index'), | |||||
// meta: { title: '云际互联', icon: 'cloudConnection' } | |||||
// } | |||||
// ] | |||||
// }, | |||||
{ | { | ||||
path: '/setting', | path: '/setting', | ||||
component: Layout, | component: Layout, | ||||
@@ -152,3 +152,24 @@ export function clearProgress(paraName) { | |||||
} | } | ||||
} | } | ||||
// 生成随机名字 | |||||
export function randomName(val) { | |||||
var myDate = new Date(); | |||||
const year = myDate.getFullYear().toString() | |||||
let month = (myDate.getMonth() + 1).toString() | |||||
if (month < 10) { | |||||
month = '0' + (myDate.getMonth() + 1).toString() | |||||
} | |||||
let date = myDate.getDate().toString() | |||||
if (date < 10) { | |||||
date = '0' + myDate.getDate().toString() | |||||
} | |||||
var charactors = "ab1cd2ef3gh4ij5kl6mn7opq8rst9uvw0xyz"; | |||||
var value = ''; var i; | |||||
for (let j = 1; j <= 4; j++) { | |||||
i = parseInt(35 * Math.random()); | |||||
value = value + charactors.charAt(i); | |||||
} | |||||
const name = val + '-' + year + month + date + '-' + value | |||||
return name | |||||
} |
@@ -111,12 +111,6 @@ | |||||
创建训练任务 | 创建训练任务 | ||||
</span> | </span> | ||||
</el-button> | </el-button> | ||||
<el-button :style="{'border-color':mainColor}" class="mainButtonBorder" size="small" | |||||
@click="create('trainingTemplate')"> | |||||
<span :style="{'color':mainColor}" class="mainButtonText"> | |||||
创建训练模板 | |||||
</span> | |||||
</el-button> | |||||
</div> | </div> | ||||
<div class="mainColText"> | <div class="mainColText"> | ||||
总训练任务: | 总训练任务: | ||||
@@ -125,13 +119,13 @@ | |||||
</span> | </span> | ||||
个 | 个 | ||||
</div> | </div> | ||||
<div class="mainBlockText"> | |||||
<!-- <div class="mainBlockText"> | |||||
任务模板: | 任务模板: | ||||
<span :style="{'color':mainColor}" class="mainNum"> | <span :style="{'color':mainColor}" class="mainNum"> | ||||
{{ trainingTemplateNum }} | {{ trainingTemplateNum }} | ||||
</span> | </span> | ||||
个 | 个 | ||||
</div> | |||||
</div> --> | |||||
</el-col> | </el-col> | ||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<span class="mainTitle" :style="{'color':mainColor}"> | <span class="mainTitle" :style="{'color':mainColor}"> | ||||
@@ -251,7 +245,6 @@ | |||||
</el-col> | </el-col> | ||||
</el-row> | </el-row> | ||||
</el-col> | </el-col> | ||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<span class="mainTitle" :style="{'color':mainColor}"> | <span class="mainTitle" :style="{'color':mainColor}"> | ||||
镜像 | 镜像 | ||||
@@ -443,16 +436,6 @@ | |||||
}); | }); | ||||
} | } | ||||
}) | }) | ||||
getTemplate(param).then(response => { | |||||
if (response.success) { | |||||
this.trainingTemplateNum = response.data.totalSize | |||||
} else { | |||||
this.$message({ | |||||
message: this.getErrorMsg(response.error.subcode), | |||||
type: 'warning' | |||||
}); | |||||
} | |||||
}) | |||||
getMyModel(param).then(response => { | getMyModel(param).then(response => { | ||||
if (response.success) { | if (response.success) { | ||||
this.myModelNum = response.data.totalSize | this.myModelNum = response.data.totalSize | ||||
@@ -123,6 +123,7 @@ | |||||
import { getMyImage, getPublicImage, getPreImage } from "@/api/imageManager"; | import { getMyImage, getPublicImage, getPreImage } from "@/api/imageManager"; | ||||
import { getResourceList } from "@/api/trainingManager"; | import { getResourceList } from "@/api/trainingManager"; | ||||
import { mapGetters } from 'vuex' | import { mapGetters } from 'vuex' | ||||
import { randomName } from '@/utils/index' | |||||
export default { | export default { | ||||
name: "NotebookCreation", | name: "NotebookCreation", | ||||
directives: { | directives: { | ||||
@@ -264,6 +265,7 @@ | |||||
created() { | created() { | ||||
// this.getResource(); | // this.getResource(); | ||||
this.getSpacePools(); | this.getSpacePools(); | ||||
this.ruleForm.name = this.randomName('notebook') | |||||
}, | }, | ||||
computed: { | computed: { | ||||
...mapGetters([ | ...mapGetters([ | ||||
@@ -271,6 +273,9 @@ | |||||
]) | ]) | ||||
}, | }, | ||||
methods: { | methods: { | ||||
randomName(val) { | |||||
return randomName(val) | |||||
}, | |||||
clearDataSetVersionOption() { | clearDataSetVersionOption() { | ||||
this.dataSetVersionOption = [] | this.dataSetVersionOption = [] | ||||
}, | }, | ||||
@@ -762,9 +767,14 @@ | |||||
.tip { | .tip { | ||||
margin: 16px 0 16px 120px; | margin: 16px 0 16px 120px; | ||||
color:#B3B3B3 | |||||
color: #B3B3B3 | |||||
} | |||||
.tip span { | |||||
color: #000; | |||||
font-weight: 600; | |||||
} | } | ||||
.tip span{color:#000;font-weight: 600;} | |||||
.el-alert__icon { | .el-alert__icon { | ||||
color: orange | color: orange | ||||
} | } |
@@ -4,7 +4,8 @@ | |||||
:close-on-click-modal="false"> | :close-on-click-modal="false"> | ||||
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" :label-width="formLabelWidth" | <el-form ref="ruleForm" :model="ruleForm" :rules="rules" :label-width="formLabelWidth" | ||||
class="demo-ruleForm"> | class="demo-ruleForm"> | ||||
<el-form-item :label="name" :label-width="formLabelWidth" placeholder="请输入任务名称" prop="name" class="[flag ==2 : 'name'? '']"> | |||||
<el-form-item :label="name" :label-width="formLabelWidth" placeholder="请输入任务名称" prop="name" | |||||
class="[flag ==2 : 'name'? '']"> | |||||
<el-input v-model="ruleForm.name" maxlength="30" show-word-limit /> | <el-input v-model="ruleForm.name" maxlength="30" show-word-limit /> | ||||
</el-form-item> | </el-form-item> | ||||
<div class="tip" v-if="flag!=2"><i | <div class="tip" v-if="flag!=2"><i | ||||
@@ -139,8 +140,8 @@ | |||||
<div slot="footer" class="dialog-footer"> | <div slot="footer" class="dialog-footer"> | ||||
<el-button v-if="showTraning" type="success" @click="traningAndSave('traning')" v-preventReClick>开始训练 | <el-button v-if="showTraning" type="success" @click="traningAndSave('traning')" v-preventReClick>开始训练 | ||||
</el-button> | </el-button> | ||||
<el-button v-if="showTemplate" type="primary" @click="traningAndSave('save')" v-preventReClick>保存模板 | |||||
</el-button> | |||||
<!-- <el-button v-if="showTemplate" type="primary" @click="traningAndSave('save')" v-preventReClick>保存模板 | |||||
</el-button> --> | |||||
<el-button type="warning" @click="cancel">取消</el-button> | <el-button type="warning" @click="cancel">取消</el-button> | ||||
</div> | </div> | ||||
</el-dialog> | </el-dialog> | ||||
@@ -154,6 +155,7 @@ | |||||
import { getPresetAlgorithmList, getPublicAlgorithmList, getMyAlgorithmList, getAlgorithmVersionList } from '@/api/modelDev' | import { getPresetAlgorithmList, getPublicAlgorithmList, getMyAlgorithmList, getAlgorithmVersionList } from '@/api/modelDev' | ||||
import { getMyImage, getPublicImage, getPreImage } from '@/api/imageManager' | import { getMyImage, getPublicImage, getPreImage } from '@/api/imageManager' | ||||
import { getMyDatasetList, getPublicDatasetList, getPresetDatasetList, getVersionList } from '@/api/datasetManager' | import { getMyDatasetList, getPublicDatasetList, getPresetDatasetList, getVersionList } from '@/api/datasetManager' | ||||
import { randomName } from '@/utils/index' | |||||
export default { | export default { | ||||
name: "DialogCreateForm", | name: "DialogCreateForm", | ||||
components: { | components: { | ||||
@@ -360,8 +362,12 @@ | |||||
this.algorithmName = true | this.algorithmName = true | ||||
this.algorithmVersion = true | this.algorithmVersion = true | ||||
} | } | ||||
this.ruleForm.name = this.randomName('trainjob') | |||||
}, | }, | ||||
methods: { | methods: { | ||||
randomName(val) { | |||||
return randomName(val) | |||||
}, | |||||
clearDataSetVersionOption() { | clearDataSetVersionOption() { | ||||
this.dataSetVersionOption = [] | this.dataSetVersionOption = [] | ||||
}, | }, | ||||
@@ -886,15 +892,21 @@ | |||||
.block { | .block { | ||||
display: block !important; | display: block !important; | ||||
} | } | ||||
.name { | .name { | ||||
margin-bottom: 0px | margin-bottom: 0px | ||||
} | } | ||||
.tip { | .tip { | ||||
margin: 16px 0 16px 120px; | margin: 16px 0 16px 120px; | ||||
color:#B3B3B3 | |||||
color: #B3B3B3 | |||||
} | } | ||||
.tip span{color:#000;font-weight: 600;} | |||||
.tip span { | |||||
color: #000; | |||||
font-weight: 600; | |||||
} | |||||
.el-alert__icon { | .el-alert__icon { | ||||
color: orange | color: orange | ||||
} | } |
@@ -4,14 +4,13 @@ | |||||
:close-on-click-modal="false"> | :close-on-click-modal="false"> | ||||
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" :label-width="formLabelWidth" | <el-form ref="ruleForm" :model="ruleForm" :rules="rules" :label-width="formLabelWidth" | ||||
class="demo-ruleForm"> | class="demo-ruleForm"> | ||||
<el-form-item :label="name" :label-width="formLabelWidth" placeholder="请输入镜像名称" prop="name" | |||||
class="[flag ==2 : 'name'? '']"> | |||||
<el-form-item label="任务名称" :label-width="formLabelWidth" placeholder="请输入任务名称" prop="name"> | |||||
<el-input v-model="ruleForm.name" maxlength="30" show-word-limit /> | <el-input v-model="ruleForm.name" maxlength="30" show-word-limit /> | ||||
</el-form-item> | </el-form-item> | ||||
<div class="tip" v-if="flag==2"><i | |||||
<div class="tip"><i | |||||
class="el-alert__icon el-icon-warning"></i>算法存储在<span>/code</span>中,数据集存储在<span>/dataset</span>中,用户目录在<span>/userhome</span>中,训练输出请存储在<span>/model</span>中以供后续下载 | class="el-alert__icon el-icon-warning"></i>算法存储在<span>/code</span>中,数据集存储在<span>/dataset</span>中,用户目录在<span>/userhome</span>中,训练输出请存储在<span>/model</span>中以供后续下载 | ||||
</div> | </div> | ||||
<el-form-item :label="desc" :label-width="formLabelWidth"> | |||||
<el-form-item label="任务描述" :label-width="formLabelWidth"> | |||||
<el-input v-model="ruleForm.desc" type="textarea" maxlength="300" show-word-limit /> | <el-input v-model="ruleForm.desc" type="textarea" maxlength="300" show-word-limit /> | ||||
</el-form-item> | </el-form-item> | ||||
<!-- 算法三级框 --> | <!-- 算法三级框 --> | ||||
@@ -137,10 +136,10 @@ | |||||
</div> | </div> | ||||
</el-form> | </el-form> | ||||
<div slot="footer" class="dialog-footer"> | <div slot="footer" class="dialog-footer"> | ||||
<el-button v-if="showTraning" type="success" @click="traningAndSave('traning')" v-preventReClick>开始训练 | |||||
</el-button> | |||||
<el-button v-if="!showTemplate" type="primary" @click="traningAndSave('save')" v-preventReClick>保存模板 | |||||
<el-button type="success" @click="traningAndSave('traning')" v-preventReClick>开始训练 | |||||
</el-button> | </el-button> | ||||
<!-- <el-button v-if="!showTemplate" type="primary" @click="traningAndSave('save')" v-preventReClick>保存模板 | |||||
</el-button> --> | |||||
<el-button type="warning" @click="cancel">取消</el-button> | <el-button type="warning" @click="cancel">取消</el-button> | ||||
</div> | </div> | ||||
</el-dialog> | </el-dialog> | ||||
@@ -154,6 +153,7 @@ | |||||
import { getPresetAlgorithmList, getPublicAlgorithmList, getMyAlgorithmList, getAlgorithmVersionList } from '@/api/modelDev' | import { getPresetAlgorithmList, getPublicAlgorithmList, getMyAlgorithmList, getAlgorithmVersionList } from '@/api/modelDev' | ||||
import { getMyImage, getPublicImage, getPreImage } from '@/api/imageManager' | import { getMyImage, getPublicImage, getPreImage } from '@/api/imageManager' | ||||
import { getMyDatasetList, getPublicDatasetList, getPresetDatasetList, getVersionList } from '@/api/datasetManager' | import { getMyDatasetList, getPublicDatasetList, getPresetDatasetList, getVersionList } from '@/api/datasetManager' | ||||
import { randomName } from '@/utils/index' | |||||
export default { | export default { | ||||
name: "DialogEditForm", | name: "DialogEditForm", | ||||
components: { | components: { | ||||
@@ -283,8 +283,6 @@ | |||||
algorithmNameTemp: '', | algorithmNameTemp: '', | ||||
imageTemp: '', | imageTemp: '', | ||||
dataSetTemp: '', | dataSetTemp: '', | ||||
name: '', | |||||
desc: '' | |||||
} | } | ||||
}, | }, | ||||
@@ -293,15 +291,13 @@ | |||||
switch (this.flag) { | switch (this.flag) { | ||||
case 1: | case 1: | ||||
this.showTraning = false | this.showTraning = false | ||||
this.name = '模版名称' | |||||
this.desc = '模版描述' | |||||
return '编辑任务模板' | |||||
delete this.rules.resourcePool | |||||
return '编辑训练任务' | |||||
break | break | ||||
case 2: | case 2: | ||||
this.showTraning = true | this.showTraning = true | ||||
this.showTemplate = true | this.showTemplate = true | ||||
this.name = '任务名称' | |||||
this.desc = '任务描述' | |||||
return '创建训练任务' | return '创建训练任务' | ||||
break | break | ||||
} | } | ||||
@@ -344,8 +340,12 @@ | |||||
this.dataSetVersion = true | this.dataSetVersion = true | ||||
// 获取模板信息 | // 获取模板信息 | ||||
this.getSpacePools() | this.getSpacePools() | ||||
this.ruleForm.name = this.randomName('trainjob') | |||||
}, | }, | ||||
methods: { | methods: { | ||||
randomName(val) { | |||||
return randomName(val) | |||||
}, | |||||
clearDataSetVersionOption() { | clearDataSetVersionOption() { | ||||
this.dataSetVersionOption = [] | this.dataSetVersionOption = [] | ||||
}, | }, | ||||
@@ -387,7 +387,7 @@ | |||||
if (this.flag === 2) { | if (this.flag === 2) { | ||||
this.ruleForm.name = '' | this.ruleForm.name = '' | ||||
} | } | ||||
this.getResourceList() | |||||
// this.getResourceList() | |||||
}, | }, | ||||
changeDisResourceList() { | changeDisResourceList() { | ||||
this.resourceOptions = [] | this.resourceOptions = [] | ||||
@@ -437,7 +437,7 @@ | |||||
}, | }, | ||||
cancel() { | cancel() { | ||||
let message = '' | let message = '' | ||||
if (this.flag === 1) { message = '此操作将放弃编辑任务模板, 是否继续?' } else { message = '此操作将放弃创建训练任务,是否继续' } | |||||
if (this.flag === 1) { message = '此操作将放弃编辑训练任务, 是否继续?' } else { message = '此操作将放弃创建训练任务,是否继续' } | |||||
this.$confirm(message, '提示', { | this.$confirm(message, '提示', { | ||||
confirmButtonText: '确定', | confirmButtonText: '确定', | ||||
cancelButtonText: '取消', | cancelButtonText: '取消', | ||||
@@ -3,9 +3,9 @@ | |||||
<el-tab-pane label="训练任务" name="menu1"> | <el-tab-pane label="训练任务" name="menu1"> | ||||
<traningTask v-if="tabRefresh.menu1" :training-task="trainingTask" /> | <traningTask v-if="tabRefresh.menu1" :training-task="trainingTask" /> | ||||
</el-tab-pane> | </el-tab-pane> | ||||
<el-tab-pane label="任务模板" name="menu2"> | |||||
<!-- <el-tab-pane label="任务模板" name="menu2"> | |||||
<taskTemplate v-if="tabRefresh.menu2" :training-template="trainingTemplate" @createTraning="createTraning" /> | <taskTemplate v-if="tabRefresh.menu2" :training-template="trainingTemplate" @createTraning="createTraning" /> | ||||
</el-tab-pane> | |||||
</el-tab-pane> --> | |||||
</el-tabs> | </el-tabs> | ||||
</template> | </template> | ||||
<script> | <script> | ||||
@@ -5,14 +5,9 @@ | |||||
</div> | </div> | ||||
<el-button type="primary" class="create" @click="open()">批量删除</el-button> | <el-button type="primary" class="create" @click="open()">批量删除</el-button> | ||||
<el-button type="primary" class="create" @click="create">创建任务</el-button> | <el-button type="primary" class="create" @click="create">创建任务</el-button> | ||||
<el-table | |||||
ref="multipleTable" | |||||
:data="tableData" | |||||
style="width: 100%;font-size: 15px;" | |||||
:header-cell-style="{'text-align':'left','color':'black'}" | |||||
:cell-style="{'text-align':'left'}" | |||||
@selection-change="handleSelectionChange" | |||||
> | |||||
<el-table ref="multipleTable" :data="tableData" style="width: 100%;font-size: 15px;" | |||||
:header-cell-style="{'text-align':'left','color':'black'}" :cell-style="{'text-align':'left'}" | |||||
@selection-change="handleSelectionChange"> | |||||
<el-table-column type="selection" width="55" :selectable="checkSelectable" /> | <el-table-column type="selection" width="55" :selectable="checkSelectable" /> | ||||
<el-table-column label="任务名称" align="center"> | <el-table-column label="任务名称" align="center"> | ||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
@@ -59,42 +54,35 @@ | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<el-button | <el-button | ||||
v-if="scope.row.status==='pending'||scope.row.status==='running'||scope.row.status==='preparing'" | v-if="scope.row.status==='pending'||scope.row.status==='running'||scope.row.status==='preparing'" | ||||
type="text" | |||||
@click="open2(scope.row)" | |||||
> | |||||
type="text" @click="open2(scope.row)"> | |||||
停止 | 停止 | ||||
</el-button> | </el-button> | ||||
<el-button type="text" @click="handleDetail(scope.row)">详情</el-button> | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> | ||||
<el-button | <el-button | ||||
v-if="scope.row.status==='failed'||scope.row.status==='succeeded'||scope.row.status==='stopped'" | v-if="scope.row.status==='failed'||scope.row.status==='succeeded'||scope.row.status==='stopped'" | ||||
type="text" | |||||
@click="open(scope.row)" | |||||
>删除 | |||||
type="text" @click="open(scope.row)">删除 | |||||
</el-button> | </el-button> | ||||
<el-button type="text" @click="handleEdit(scope.row,'editTemplate')">重新训练</el-button> | |||||
</template> | </template> | ||||
</el-table-column> | </el-table-column> | ||||
</el-table> | </el-table> | ||||
<div class="block"> | <div class="block"> | ||||
<el-pagination | |||||
:current-page="searchData.pageIndex" | |||||
:page-sizes="[10, 20, 50, 80]" | |||||
:page-size="searchData.pageSize" | |||||
layout="total, sizes, prev, pager, next, jumper" | |||||
:total="total" | |||||
@size-change="handleSizeChange" | |||||
@current-change="handleCurrentChange" | |||||
/> | |||||
<el-pagination :current-page="searchData.pageIndex" :page-sizes="[10, 20, 50, 80]" | |||||
:page-size="searchData.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" | |||||
@size-change="handleSizeChange" @current-change="handleCurrentChange" /> | |||||
</div> | </div> | ||||
<!-- 创建对话框 --> | <!-- 创建对话框 --> | ||||
<createDialog v-if="createDialog" :row="row" :flag="flag" @cancel="cancel" @confirm="confirm" @close="close" /> | <createDialog v-if="createDialog" :row="row" :flag="flag" @cancel="cancel" @confirm="confirm" @close="close" /> | ||||
<!-- 详情对话框 --> | <!-- 详情对话框 --> | ||||
<detailDialog v-if="detailDialog" :data="data" @cancel="cancel" @confirm="confirm" @close="close" /> | <detailDialog v-if="detailDialog" :data="data" @cancel="cancel" @confirm="confirm" @close="close" /> | ||||
<editDialog v-if="editDialog" :flag="flag" :row="row" @cancel="cancel" @confirm="confirm" @close="close" /> | |||||
</div> | </div> | ||||
</template> | </template> | ||||
<script> | <script> | ||||
import createDialog from "./components/createDialog/index.vue"; | import createDialog from "./components/createDialog/index.vue"; | ||||
import detailDialog from "./components/detailDialog/index.vue"; | import detailDialog from "./components/detailDialog/index.vue"; | ||||
import editDialog from "./components/editDialog/index.vue"; | |||||
import { getList, stop, Delete, getTraningDetail } from '@/api/trainingManager' | import { getList, stop, Delete, getTraningDetail } from '@/api/trainingManager' | ||||
import searchForm from '@/components/search/index.vue' | import searchForm from '@/components/search/index.vue' | ||||
import { formatDuring } from '@/utils/index' | import { formatDuring } from '@/utils/index' | ||||
@@ -103,13 +91,14 @@ | |||||
components: { | components: { | ||||
createDialog, | createDialog, | ||||
detailDialog, | detailDialog, | ||||
searchForm | |||||
searchForm, | |||||
editDialog, | |||||
}, | }, | ||||
props: { | props: { | ||||
trainingTask: { | |||||
type: Boolean, | |||||
default: false | |||||
} | |||||
trainingTask: { | |||||
type: Boolean, | |||||
default: false | |||||
} | |||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
@@ -119,6 +108,7 @@ | |||||
data: {}, | data: {}, | ||||
createDialog: false, | createDialog: false, | ||||
detailDialog: false, | detailDialog: false, | ||||
editDialog: false, | |||||
total: undefined, | total: undefined, | ||||
statusText: { 'preparing': ['status-ready', '初始中'], 'pending': ['status-agent', '等待中'], 'running': ['status-running', '运行中'], 'failed': ['status-danger', '失败'], 'succeeded': ['status-success', '成功'], 'stopped': ['status-stopping', '已停止'] }, | statusText: { 'preparing': ['status-ready', '初始中'], 'pending': ['status-agent', '等待中'], 'running': ['status-running', '运行中'], 'failed': ['status-danger', '失败'], 'succeeded': ['status-success', '成功'], 'stopped': ['status-stopping', '已停止'] }, | ||||
flag: undefined, | flag: undefined, | ||||
@@ -266,17 +256,20 @@ | |||||
cancel(val) { | cancel(val) { | ||||
this.getList(this.searchData) | this.getList(this.searchData) | ||||
this.createDialog = val; | this.createDialog = val; | ||||
this.detailDialog = val | |||||
this.detailDialog = val; | |||||
this.editDialog = val | |||||
}, | }, | ||||
confirm(val) { | confirm(val) { | ||||
this.getList(this.searchData) | this.getList(this.searchData) | ||||
this.createDialog = val; | this.createDialog = val; | ||||
this.detailDialog = val | |||||
this.detailDialog = val; | |||||
this.editDialog = val | |||||
}, | }, | ||||
close(val) { | close(val) { | ||||
this.getList(this.searchData) | this.getList(this.searchData) | ||||
this.createDialog = val; | this.createDialog = val; | ||||
this.detailDialog = val | |||||
this.detailDialog = val; | |||||
this.editDialog = val | |||||
}, | }, | ||||
create() { | create() { | ||||
this.createDialog = true; this.row = {} | this.createDialog = true; this.row = {} | ||||
@@ -327,7 +320,21 @@ | |||||
message: '已取消操作' | message: '已取消操作' | ||||
}); | }); | ||||
}); | }); | ||||
} | |||||
}, | |||||
handleEdit(val, name) { | |||||
getTraningDetail(val.id).then(response => { | |||||
if (response.success) { | |||||
this.editDialog = true | |||||
this.row = response.data.trainJob | |||||
if (name === 'editTemplate') { this.flag = 1 } else { this.flag = 2 } | |||||
} else { | |||||
this.$message({ | |||||
message: this.getErrorMsg(response.error.subcode), | |||||
type: 'warning' | |||||
}); | |||||
} | |||||
}) | |||||
}, | |||||
} | } | ||||
} | } | ||||
@@ -12,7 +12,7 @@ | |||||
## 文档 | ## 文档 | ||||
详细文档请参考[这里](https://octopus.openi.org.cn/docs/introduction/intro)。 | |||||
详细文档请参考[这里](https://octopus.pcl.ac.cn/docs/introduction/intro)。 | |||||
## 特点与场景 | ## 特点与场景 | ||||
@@ -46,20 +46,20 @@ Octopus 为集群用户和管理员提供端到端的手册。 | |||||
与集群管理员相关的文档包括如下: | 与集群管理员相关的文档包括如下: | ||||
- ***集群部署指南***: 此部分主要提供的内容包括:集群依赖环境与组件的准备与安装、Octopus系统部署指南以及后续系统的升级说明等,以方便安装维护。详细内容请参考[这里](https://octopus.openi.org.cn/docs/deployment/environment) 。 | |||||
- ***集群部署指南***: 此部分主要提供的内容包括:集群依赖环境与组件的准备与安装、Octopus系统部署指南以及后续系统的升级说明等,以方便安装维护。详细内容请参考[这里](https://octopus.pcl.ac.cn/docs/deployment/environment) 。 | |||||
- ***集群管理手册***: 此部分主要介绍集群管理员通过管理系统页面入口进入Octopus管理系统后可进行的操作,主要功能说明包括:平台监控、资源管理、用户管理、机时管理、数据管理、算法管理以及开发与训练管理等功能。详细内容请参考[这里](https://octopus.openi.org.cn/docs/management/intro) 。 | |||||
- ***集群管理手册***: 此部分主要介绍集群管理员通过管理系统页面入口进入Octopus管理系统后可进行的操作,主要功能说明包括:平台监控、资源管理、用户管理、机时管理、数据管理、算法管理以及开发与训练管理等功能。详细内容请参考[这里](https://octopus.pcl.ac.cn/docs/management/intro) 。 | |||||
### 对于集群用户 | ### 对于集群用户 | ||||
与集群用户相关的文档主要如下: | 与集群用户相关的文档主要如下: | ||||
- ***用户使用手册***: 此部分主要介绍集群用户通过Octopus系统页面入口进入Octopus系统后可进行的操作,主要功能说明包括:数据管理、算法管理、镜像管理以及开发与训练管理等功能。详细内容请参考[这里](https://octopus.openi.org.cn/docs/manual/intro) 。 | |||||
- ***用户使用手册***: 此部分主要介绍集群用户通过Octopus系统页面入口进入Octopus系统后可进行的操作,主要功能说明包括:数据管理、算法管理、镜像管理以及开发与训练管理等功能。详细内容请参考[这里](https://octopus.pcl.ac.cn/docs/manual/intro) 。 | |||||
## 如何贡献 | ## 如何贡献 | ||||
详细贡献指南请参考[这里](https://octopus.openi.org.cn/docs/community/contribution) 。 | |||||
详细贡献指南请参考[这里](https://octopus.pcl.ac.cn/docs/community/contribution) 。 | |||||
## License | ## License | ||||
[Apache License](https://octopus.openi.org.cn/docs/community/LICENSE) | |||||
[Apache License](https://octopus.pcl.ac.cn/docs/community/LICENSE) |
@@ -13,7 +13,7 @@ At the same time, cluster management personnel are provided with functions such | |||||
## Documentations | ## Documentations | ||||
For detailed documentation, please refer to [here](https:///octopus.openi.org.cn/docs/introduction/intro). | |||||
For detailed documentation, please refer to [here](https:///octopus.pcl.ac.cn/docs/introduction/intro). | |||||
## Features and Scenarios | ## Features and Scenarios | ||||
@@ -47,20 +47,20 @@ Octopus provides end-to-end manuals for cluster users and administrators. | |||||
Documents related to cluster administrators include the following: | Documents related to cluster administrators include the following: | ||||
- ***Cluster Deployment Guide***: the main contents provided in this part include: preparation and installation of cluster dependent environment and components, Octopus system deployment guide and follow-up system upgrade instructions to facilitate installation and maintenance. For details, please refer to [here](https://octopus.openi.org.cn/docs/deployment/environment) 。 | |||||
- ***Cluster Deployment Guide***: the main contents provided in this part include: preparation and installation of cluster dependent environment and components, Octopus system deployment guide and follow-up system upgrade instructions to facilitate installation and maintenance. For details, please refer to [here](https://octopus.pcl.ac.cn/docs/deployment/environment) 。 | |||||
- ***Cluster Management Manual***: This part mainly introduces the operations that the cluster administrator can perform after entering the Octopus management system through the management system page entrance. The main function descriptions include: platform monitoring, resource management, user management, machine time management, data management, algorithm management, development and training management And other functions. For details, please refer to [here](https://octopus.openi.org.cn/docs/management/intro). | |||||
- ***Cluster Management Manual***: This part mainly introduces the operations that the cluster administrator can perform after entering the Octopus management system through the management system page entrance. The main function descriptions include: platform monitoring, resource management, user management, machine time management, data management, algorithm management, development and training management And other functions. For details, please refer to [here](https://octopus.pcl.ac.cn/docs/management/intro). | |||||
### For cluster users | ### For cluster users | ||||
The main documents related to cluster users are as follows: | The main documents related to cluster users are as follows: | ||||
- ***User Manual***: this part mainly introduces the operations that cluster users can perform after entering the Octopus system through the Octopus system page entrance. The main function descriptions include: data management, algorithm management, mirroring management, development and training management and other functions. For details, please refer to [here](https://octopus.openi.org.cn/docs/manual/intro). | |||||
- ***User Manual***: this part mainly introduces the operations that cluster users can perform after entering the Octopus system through the Octopus system page entrance. The main function descriptions include: data management, algorithm management, mirroring management, development and training management and other functions. For details, please refer to [here](https://octopus.pcl.ac.cn/docs/manual/intro). | |||||
## How to Contribute | ## How to Contribute | ||||
For detailed contribution guidelines, please refer to [here](https://octopus.openi.org.cn/docs/community/contribution). | |||||
For detailed contribution guidelines, please refer to [here](https://octopus.pcl.ac.cn/docs/community/contribution). | |||||
## License | ## License | ||||
[Apache License](https://octopus.openi.org.cn/docs/community/LICENSE) | |||||
[Apache License](https://octopus.pcl.ac.cn/docs/community/LICENSE) |
@@ -43,6 +43,8 @@ message ResourcePool { | |||||
bool default = 4; | bool default = 4; | ||||
repeated string bindingNodes = 5; | repeated string bindingNodes = 5; | ||||
map<string,ResourceSpecIdList> mapResourceSpecIdList = 6; | map<string,ResourceSpecIdList> mapResourceSpecIdList = 6; | ||||
map<string,string> resourceCapacity = 7; | |||||
map<string,string> resourceAllocated = 8; | |||||
} | } | ||||
message ResourcePoolList { | message ResourcePoolList { | ||||
@@ -65,6 +65,20 @@ service User { | |||||
body: "*" | body: "*" | ||||
}; | }; | ||||
}; | }; | ||||
rpc UpdateUserMinioAccount (UpdateUserMinioAccountRequest) returns (UpdateUserMinioAccountReply) { | |||||
option (google.api.http) = { | |||||
put: "/v1/usermanage/user/{userId}/minioaccount" | |||||
body: "*" | |||||
}; | |||||
}; | |||||
rpc UpdateUserMinioBuckets (UpdateUserMinioBucketsRequest) returns (UpdateUserMinioBucketsReply) { | |||||
option (google.api.http) = { | |||||
put: "/v1/usermanage/user/{userId}/miniobuckets" | |||||
body: "*" | |||||
}; | |||||
}; | |||||
} | } | ||||
message UserItem { | message UserItem { | ||||
@@ -79,6 +93,8 @@ message UserItem { | |||||
repeated string resourcePools = 9; | repeated string resourcePools = 9; | ||||
string desc=10; | string desc=10; | ||||
common.api.v1.UserPermission permission = 11; | common.api.v1.UserPermission permission = 11; | ||||
repeated string buckets = 12; | |||||
string minioUserName = 13; | |||||
} | } | ||||
message ListUserRequest { | message ListUserRequest { | ||||
@@ -178,4 +194,23 @@ message UpdateUserConfigRequest { | |||||
message UpdateUserConfigReply { | message UpdateUserConfigReply { | ||||
} | |||||
message UpdateUserMinioAccountRequest { | |||||
string userId = 1; | |||||
string minioUserName = 2; | |||||
string minioPassword = 3; | |||||
} | |||||
message UpdateUserMinioAccountReply { | |||||
} | |||||
message UpdateUserMinioBucketsRequest { | |||||
string userId = 1; | |||||
repeated string buckets = 2; | |||||
} | |||||
message UpdateUserMinioBucketsReply { | |||||
} | } |
@@ -2,6 +2,7 @@ package service | |||||
import ( | import ( | ||||
"context" | "context" | ||||
"github.com/jinzhu/copier" | |||||
api "server/admin-server/api/v1" | api "server/admin-server/api/v1" | ||||
"server/admin-server/internal/conf" | "server/admin-server/internal/conf" | ||||
"server/admin-server/internal/data" | "server/admin-server/internal/data" | ||||
@@ -9,8 +10,6 @@ import ( | |||||
"server/common/errors" | "server/common/errors" | ||||
"server/common/log" | "server/common/log" | ||||
"server/common/utils/collections/set" | "server/common/utils/collections/set" | ||||
"github.com/jinzhu/copier" | |||||
) | ) | ||||
type billingService struct { | type billingService struct { | ||||
@@ -111,7 +110,6 @@ func (s *billingService) RechargeUser(ctx context.Context, req *api.RechargeUser | |||||
Amount: req.Amount, | Amount: req.Amount, | ||||
Title: req.Title, | Title: req.Title, | ||||
}) | }) | ||||
if err != nil { | if err != nil { | ||||
return nil, err | return nil, err | ||||
} | } | ||||
@@ -10,6 +10,10 @@ import ( | |||||
"server/common/errors" | "server/common/errors" | ||||
"server/common/log" | "server/common/log" | ||||
"k8s.io/apimachinery/pkg/api/resource" | |||||
"google.golang.org/protobuf/types/known/emptypb" | |||||
"github.com/golang/protobuf/ptypes/empty" | "github.com/golang/protobuf/ptypes/empty" | ||||
) | ) | ||||
@@ -49,6 +53,56 @@ func (rsps *ResourcePoolService) ListResourcePool(ctx context.Context, req *empt | |||||
return nil, errors.Errorf(err, errors.ErrorListResourcePool) | return nil, errors.Errorf(err, errors.ErrorListResourcePool) | ||||
} | } | ||||
nodes, err := rsps.data.NodeClient.ListNode(ctx, &emptypb.Empty{}) | |||||
if err != nil { | |||||
return nil, errors.Errorf(err, errors.ErrorListResourcePool) | |||||
} | |||||
for _, p := range apiReply.ResourcePools { | |||||
capacity := make(map[string]*resource.Quantity) | |||||
allocated := make(map[string]*resource.Quantity) | |||||
for _, nn := range p.BindingNodes { | |||||
for _, n := range nodes.Nodes { | |||||
if nn == n.Name { | |||||
for k, v := range n.Capacity { | |||||
q, err := resource.ParseQuantity(v) | |||||
if err != nil { | |||||
log.Errorf(ctx, "parse %s error", v) | |||||
continue | |||||
} | |||||
_, exist := capacity[k] | |||||
if !exist { | |||||
capacity[k] = &q | |||||
} else { | |||||
capacity[k].Add(q) | |||||
} | |||||
} | |||||
for k, v := range n.Allocated { | |||||
q, err := resource.ParseQuantity(v) | |||||
if err != nil { | |||||
log.Errorf(ctx, "parse %s error", v) | |||||
continue | |||||
} | |||||
_, exist := allocated[k] | |||||
if !exist { | |||||
allocated[k] = &q | |||||
} else { | |||||
allocated[k].Add(q) | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
p.ResourceCapacity = make(map[string]string) | |||||
p.ResourceAllocated = make(map[string]string) | |||||
for k, v := range capacity { | |||||
p.ResourceCapacity[k] = v.String() | |||||
} | |||||
for k, v := range allocated { | |||||
p.ResourceAllocated[k] = v.String() | |||||
} | |||||
} | |||||
return apiReply, nil | return apiReply, nil | ||||
} | } | ||||
@@ -60,6 +60,8 @@ func (s *UserService) ListUser(ctx context.Context, req *pb.ListUserRequest) (*p | |||||
ResourcePools: user.ResourcePools, | ResourcePools: user.ResourcePools, | ||||
Desc: user.Desc, | Desc: user.Desc, | ||||
Permission: user.Permission, | Permission: user.Permission, | ||||
MinioUserName: user.MinioUserName, | |||||
Buckets: user.Buckets, | |||||
} | } | ||||
} | } | ||||
@@ -106,6 +108,8 @@ func (s *UserService) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb. | |||||
ResourcePools: user.ResourcePools, | ResourcePools: user.ResourcePools, | ||||
Desc: user.Desc, | Desc: user.Desc, | ||||
Permission: user.Permission, | Permission: user.Permission, | ||||
MinioUserName: user.MinioUserName, | |||||
Buckets: user.Buckets, | |||||
}, | }, | ||||
Workspaces: workspaces, | Workspaces: workspaces, | ||||
}, nil | }, nil | ||||
@@ -241,3 +245,30 @@ func (s *UserService) UpdateUserConfig(ctx context.Context, req *pb.UpdateUserCo | |||||
} | } | ||||
return &pb.UpdateUserConfigReply{}, nil | return &pb.UpdateUserConfigReply{}, nil | ||||
} | } | ||||
func (s *UserService) UpdateUserMinioAccount(ctx context.Context, req *pb.UpdateUserMinioAccountRequest) (*pb.UpdateUserMinioAccountReply, error) { | |||||
_, err := s.data.UserClient.UpdateUserMinioAccount(ctx, &innterapi.UpdateUserMinioAccountRequest{ | |||||
MinioUserName: req.MinioUserName, | |||||
MinioPassword: req.MinioPassword, | |||||
UserId: req.UserId, | |||||
}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return &pb.UpdateUserMinioAccountReply{}, nil | |||||
} | |||||
func (s *UserService) UpdateUserMinioBuckets(ctx context.Context, req *pb.UpdateUserMinioBucketsRequest) (*pb.UpdateUserMinioBucketsReply, error) { | |||||
_, err := s.data.UserClient.UpdateUserMinioBuckets(ctx, &innterapi.UpdateUserMinioBucketsRequest{ | |||||
UserId: req.UserId, | |||||
Buckets: req.Buckets, | |||||
}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return &pb.UpdateUserMinioBucketsReply{}, nil | |||||
} |
@@ -47,6 +47,8 @@ message CreateNotebookRequest { | |||||
repeated common.api.v1.Mount mounts = 13; | repeated common.api.v1.Mount mounts = 13; | ||||
//镜像地址,非必填,镜像地址和镜像ID填一个 | //镜像地址,非必填,镜像地址和镜像ID填一个 | ||||
string imageUrl = 14; | string imageUrl = 14; | ||||
map<string, string> envs = 15; | |||||
string command = 16; | |||||
} | } | ||||
message CreateNotebookReply { | message CreateNotebookReply { | ||||
@@ -92,6 +92,7 @@ message Config { | |||||
double resourceSpecPrice = 10; | double resourceSpecPrice = 10; | ||||
repeated ReplicaState replicaStates = 11; | repeated ReplicaState replicaStates = 11; | ||||
string subTaskState = 12; | string subTaskState = 12; | ||||
map<string, string> envs = 13; | |||||
} | } | ||||
message ReplicaState { | message ReplicaState { | ||||
@@ -21,6 +21,8 @@ service UserService { | |||||
rpc GetUserConfig (GetUserConfigRequest) returns (GetUserConfigReply); | rpc GetUserConfig (GetUserConfigRequest) returns (GetUserConfigReply); | ||||
rpc UpdateUserConfig (UpdateUserConfigRequest) returns (UpdateUserConfigReply); | rpc UpdateUserConfig (UpdateUserConfigRequest) returns (UpdateUserConfigReply); | ||||
rpc UpdateUserFtpAccount (UpdateUserFtpAccountRequest) returns (UpdateUserFtpAccountReply); | rpc UpdateUserFtpAccount (UpdateUserFtpAccountRequest) returns (UpdateUserFtpAccountReply); | ||||
rpc UpdateUserMinioAccount (UpdateUserMinioAccountRequest) returns (UpdateUserMinioAccountReply); | |||||
rpc UpdateUserMinioBuckets (UpdateUserMinioBucketsRequest) returns (UpdateUserMinioBucketsReply); | |||||
} | } | ||||
enum UserStatus | enum UserStatus | ||||
@@ -52,6 +54,8 @@ message UserItem { | |||||
repeated string resourcePools = 12; | repeated string resourcePools = 12; | ||||
string desc=13; | string desc=13; | ||||
common.api.v1.UserPermission permission = 14; | common.api.v1.UserPermission permission = 14; | ||||
repeated string buckets = 15; | |||||
string minioUserName = 16; | |||||
} | } | ||||
message Bind { | message Bind { | ||||
@@ -171,4 +175,23 @@ message UpdateUserFtpAccountRequest { | |||||
message UpdateUserFtpAccountReply { | message UpdateUserFtpAccountReply { | ||||
} | |||||
message UpdateUserMinioAccountRequest { | |||||
string userId = 1; | |||||
string minioUserName = 2; | |||||
string minioPassword = 3; | |||||
} | |||||
message UpdateUserMinioAccountReply { | |||||
} | |||||
message UpdateUserMinioBucketsRequest { | |||||
string userId = 1; | |||||
repeated string buckets = 2; | |||||
} | |||||
message UpdateUserMinioBucketsReply { | |||||
} | } |
@@ -15,8 +15,8 @@ data: | |||||
driver: mysql | driver: mysql | ||||
source: root:root@tcp(192.168.203.154:30336)/octopus?charset=utf8&parseTime=True&loc=Local | source: root:root@tcp(192.168.203.154:30336)/octopus?charset=utf8&parseTime=True&loc=Local | ||||
kubernetes: | kubernetes: | ||||
masterUrl: https://192.168.202.73:6443/ | |||||
configPath: C:/Users/dell/Desktop/154kubeconfig | |||||
masterUrl: https://192.168.203.154:6443/ | |||||
configPath: C:/Users/dell/Desktop/kubeconfig | |||||
minio: | minio: | ||||
base: | base: | ||||
endPoint: 192.168.203.154:31311 | endPoint: 192.168.203.154:31311 | ||||
@@ -36,7 +36,7 @@ data: | |||||
apiVersion: v1.0 | apiVersion: v1.0 | ||||
useSSL: false | useSSL: false | ||||
redis: | redis: | ||||
addr: 192.168.203.154:32112 | |||||
addr: 192.168.203.154:32260 | |||||
username: | username: | ||||
password: abcde | password: abcde | ||||
influxdb: | influxdb: | ||||
@@ -67,7 +67,6 @@ service: | |||||
resourceLabelKey: octopus.pcl.ac.cn/type | resourceLabelKey: octopus.pcl.ac.cn/type | ||||
billingPeriodSec: 60 | billingPeriodSec: 60 | ||||
develop: | develop: | ||||
jpyBaseUrlEnv: OCTOPUS_JPY_BASE_URL | |||||
autoStopIntervalSec: 7200 | autoStopIntervalSec: 7200 | ||||
isSetUploadFileSize: true #值为false时,上传文件大小不能超过1M;为true时,不限制 | isSetUploadFileSize: true #值为false时,上传文件大小不能超过1M;为true时,不限制 | ||||
resource: | resource: | ||||
@@ -4,6 +4,7 @@ import ( | |||||
"database/sql/driver" | "database/sql/driver" | ||||
"encoding/json" | "encoding/json" | ||||
"fmt" | "fmt" | ||||
"path" | |||||
commapi "server/common/api/v1" | commapi "server/common/api/v1" | ||||
v1 "k8s.io/api/core/v1" | v1 "k8s.io/api/core/v1" | ||||
@@ -24,7 +25,7 @@ func (r *Mounts) Scan(input interface{}) error { | |||||
} | } | ||||
} | } | ||||
func GetVolumes(mounts Mounts) ([]v1.Volume, []v1.VolumeMount) { | |||||
func GetVolumes(mounts Mounts, octopusVolume string) ([]v1.Volume, []v1.VolumeMount) { | |||||
volumes := make([]v1.Volume, 0) | volumes := make([]v1.Volume, 0) | ||||
volumeMounts := make([]v1.VolumeMount, 0) | volumeMounts := make([]v1.VolumeMount, 0) | ||||
for i, m := range mounts { | for i, m := range mounts { | ||||
@@ -45,6 +46,15 @@ func GetVolumes(mounts Mounts) ([]v1.Volume, []v1.VolumeMount) { | |||||
ReadOnly: m.ReadOnly, | ReadOnly: m.ReadOnly, | ||||
}) | }) | ||||
} | } | ||||
if m.Octopus != nil { | |||||
volumeMounts = append(volumeMounts, v1.VolumeMount{ | |||||
Name: octopusVolume, | |||||
MountPath: m.ContainerPath, | |||||
SubPath: path.Join(m.Octopus.Bucket, m.Octopus.Object), | |||||
ReadOnly: m.ReadOnly, | |||||
}) | |||||
} | |||||
} | } | ||||
return volumes, volumeMounts | return volumes, volumeMounts | ||||
@@ -4,14 +4,13 @@ import ( | |||||
"context" | "context" | ||||
stderrors "errors" | stderrors "errors" | ||||
"fmt" | "fmt" | ||||
"gorm.io/gorm" | |||||
"server/base-server/internal/data/dao/model" | "server/base-server/internal/data/dao/model" | ||||
"server/common/errors" | "server/common/errors" | ||||
"server/common/log" | "server/common/log" | ||||
"server/common/transaction" | "server/common/transaction" | ||||
"server/common/utils" | "server/common/utils" | ||||
"time" | "time" | ||||
"gorm.io/gorm" | |||||
) | ) | ||||
type BillingDao interface { | type BillingDao interface { | ||||
@@ -74,7 +73,10 @@ func (d *billingDao) CreateBillingOwner(ctx context.Context, owner *model.Billin | |||||
func (d *billingDao) UpdateBillingOwnerSelective(ctx context.Context, key *model.BillingOwnerKey, owner *model.BillingOwner) error { | func (d *billingDao) UpdateBillingOwnerSelective(ctx context.Context, key *model.BillingOwnerKey, owner *model.BillingOwner) error { | ||||
db := d.db(ctx) | db := d.db(ctx) | ||||
res := db.Where("owner_id = ? and owner_type = ? ", key.OwnerId, key.OwnerType).Updates(owner) | |||||
ownerMap := map[string]interface{}{ | |||||
"amount":owner.Amount, | |||||
} | |||||
res := db.Model(model.BillingOwner{}).Where("owner_id = ? and owner_type = ? ", key.OwnerId, key.OwnerType).Updates(ownerMap) | |||||
if res.Error != nil { | if res.Error != nil { | ||||
return errors.Errorf(res.Error, errors.ErrorDBUpdateFailed) | return errors.Errorf(res.Error, errors.ErrorDBUpdateFailed) | ||||
@@ -5,6 +5,7 @@ import ( | |||||
"server/base-server/internal/common" | "server/base-server/internal/common" | ||||
v1 "server/common/api/v1" | v1 "server/common/api/v1" | ||||
"server/common/dao" | "server/common/dao" | ||||
"server/common/sql" | |||||
"time" | "time" | ||||
"gorm.io/plugin/soft_delete" | "gorm.io/plugin/soft_delete" | ||||
@@ -33,7 +34,9 @@ type Notebook struct { | |||||
Status string `gorm:"type:varchar(50);not null;default:'';comment:preparing/pending/running/stopped"` | Status string `gorm:"type:varchar(50);not null;default:'';comment:preparing/pending/running/stopped"` | ||||
TaskNumber int `gorm:"type:int;not null;default:1;comment:任务个数"` | TaskNumber int `gorm:"type:int;not null;default:1;comment:任务个数"` | ||||
ResourcePool string `gorm:"type:varchar(300);default:'';comment:资源池"` | ResourcePool string `gorm:"type:varchar(300);default:'';comment:资源池"` | ||||
Mounts common.Mounts `gorm:"type:json;comment:挂载外部存储"` | |||||
Mounts common.Mounts `gorm:"type:json;comment:挂载存储"` | |||||
Envs sql.Map `gorm:"type:json;comment:环境变量"` | |||||
Command string `gorm:"type:text;comment:启动命令"` | |||||
DeletedAt soft_delete.DeletedAt `gorm:"uniqueIndex:name_userId_spaceId,priority:4"` | DeletedAt soft_delete.DeletedAt `gorm:"uniqueIndex:name_userId_spaceId,priority:4"` | ||||
} | } | ||||
@@ -69,6 +69,7 @@ type Config struct { | |||||
ResourceSpecPrice float64 `json:"resourceSpecPrice"` | ResourceSpecPrice float64 `json:"resourceSpecPrice"` | ||||
IsMainRole bool `json:"isMainRole"` | IsMainRole bool `json:"isMainRole"` | ||||
ShareMemory *resource.Quantity `json:"shareMemory"` | ShareMemory *resource.Quantity `json:"shareMemory"` | ||||
Envs map[string]string `json:"envs"` | |||||
} | } | ||||
type ResourceSpecPrice struct { | type ResourceSpecPrice struct { | ||||
@@ -68,6 +68,8 @@ type User struct { | |||||
ResourcePools ResourcePools `gorm:"type:json;comment:'资源池'"` | ResourcePools ResourcePools `gorm:"type:json;comment:'资源池'"` | ||||
Desc string `gorm:"type:varchar(100);default:'';index;comment:'备注'"` | Desc string `gorm:"type:varchar(100);default:'';index;comment:'备注'"` | ||||
Permission *Permission `gorm:"type:json;comment:权限"` | Permission *Permission `gorm:"type:json;comment:权限"` | ||||
MinioUserName string `gorm:"type:varchar(100);uniqueIndex:minioUserName;comment:'minio用户名'"` | |||||
Buckets sql.Strings `gorm:"type:json;comment:'允许访问的buckets'"` | |||||
} | } | ||||
func (User) TableName() string { | func (User) TableName() string { | ||||
@@ -198,6 +200,8 @@ type UserUpdate struct { | |||||
ResourcePools []string | ResourcePools []string | ||||
Desc string | Desc string | ||||
Permission *Permission | Permission *Permission | ||||
MinioUserName string | |||||
Buckets []string | |||||
} | } | ||||
type UserUpdateCond struct { | type UserUpdateCond struct { | ||||
@@ -212,8 +216,8 @@ type UserListIn struct { | |||||
type UserConfig struct { | type UserConfig struct { | ||||
dao.Model | dao.Model | ||||
UserId string `gorm:"primaryKey;type:varchar(100);not null;default:'';comment:用户id"` | |||||
Config sql.SqlJson `gorm:"type:json;comment:配置"` | |||||
UserId string `gorm:"primaryKey;type:varchar(100);not null;default:'';comment:用户id"` | |||||
Config sql.Map `gorm:"type:json;comment:配置"` | |||||
} | } | ||||
func (UserConfig) TableName() string { | func (UserConfig) TableName() string { | ||||
@@ -125,7 +125,7 @@ func (d *userDao) Add(ctx context.Context, user *model.UserAdd) (*model.User, er | |||||
Desc: user.Desc, | Desc: user.Desc, | ||||
} | } | ||||
result := db.Omit("ftp_user_name").Create(&u) | |||||
result := db.Omit("ftp_user_name", "minio_user_name").Create(&u) | |||||
if result.Error != nil { | if result.Error != nil { | ||||
return nil, result.Error | return nil, result.Error | ||||
} | } | ||||
@@ -156,6 +156,8 @@ func (d *userDao) Update(ctx context.Context, cond *model.UserUpdateCond, user * | |||||
ResourcePools: user.ResourcePools, | ResourcePools: user.ResourcePools, | ||||
Desc: user.Desc, | Desc: user.Desc, | ||||
Permission: user.Permission, | Permission: user.Permission, | ||||
MinioUserName: user.MinioUserName, | |||||
Buckets: user.Buckets, | |||||
}) | }) | ||||
if result.Error != nil { | if result.Error != nil { | ||||
return nil, result.Error | return nil, result.Error | ||||
@@ -9,8 +9,11 @@ import ( | |||||
"server/base-server/internal/common" | "server/base-server/internal/common" | ||||
"server/base-server/internal/conf" | "server/base-server/internal/conf" | ||||
"server/common/errors" | "server/common/errors" | ||||
"strings" | |||||
"time" | "time" | ||||
"github.com/minio/madmin-go" | |||||
"server/common/log" | "server/common/log" | ||||
miniogo "github.com/minio/minio-go/v7" | miniogo "github.com/minio/minio-go/v7" | ||||
@@ -30,6 +33,12 @@ type Minio interface { | |||||
ListObjects(bucketName string, objectPrefix string, recurSvie bool) ([]*ObjectInfo, error) | ListObjects(bucketName string, objectPrefix string, recurSvie bool) ([]*ObjectInfo, error) | ||||
// 查看对象是否存在 | // 查看对象是否存在 | ||||
ObjectExist(bucketName string, objectName string) (bool, error) | ObjectExist(bucketName string, objectName string) (bool, error) | ||||
CreateOrUpdateAccount(ctx context.Context, userName string, password string) error | |||||
BucketExists(ctx context.Context, bucketName string) (bool, error) | |||||
SetUserBucketsAccess(ctx context.Context, userName string, buckets []string) error | |||||
} | } | ||||
type ObjectInfo struct { | type ObjectInfo struct { | ||||
@@ -40,9 +49,10 @@ type ObjectInfo struct { | |||||
} | } | ||||
type minio struct { | type minio struct { | ||||
log *log.Helper | |||||
conf *conf.Data | |||||
client *miniogo.Client | |||||
log *log.Helper | |||||
conf *conf.Data | |||||
client *miniogo.Client | |||||
adminClient *madmin.AdminClient | |||||
} | } | ||||
func NewMinio(conf *conf.Data, logger log.Logger) Minio { | func NewMinio(conf *conf.Data, logger log.Logger) Minio { | ||||
@@ -55,10 +65,16 @@ func NewMinio(conf *conf.Data, logger log.Logger) Minio { | |||||
panic(err) | panic(err) | ||||
} | } | ||||
adminClient, err := madmin.New(conf.Minio.Base.EndPoint, conf.Minio.Base.AccessKeyID, conf.Minio.Base.SecretAccessKey, false) | |||||
if err != nil { | |||||
panic(err) | |||||
} | |||||
minio := &minio{ | minio := &minio{ | ||||
log: log.NewHelper("Minio", logger), | |||||
conf: conf, | |||||
client: client, | |||||
log: log.NewHelper("Minio", logger), | |||||
conf: conf, | |||||
client: client, | |||||
adminClient: adminClient, | |||||
} | } | ||||
// 创建默认的桶 | // 创建默认的桶 | ||||
@@ -241,3 +257,41 @@ func (m *minio) ObjectExist(bucketName string, objectName string) (bool, error) | |||||
return true, nil | return true, nil | ||||
} | } | ||||
func (m *minio) CreateOrUpdateAccount(ctx context.Context, userName string, password string) error { | |||||
err := m.adminClient.AddUser(ctx, userName, password) | |||||
if err != nil { | |||||
return errors.Errorf(err, errors.ErrorMinioCreateAccountFailed) | |||||
} | |||||
return nil | |||||
} | |||||
func (m *minio) BucketExists(ctx context.Context, bucketName string) (bool, error) { | |||||
isExist, err := m.client.BucketExists(ctx, bucketName) | |||||
if err != nil { | |||||
return false, errors.Errorf(err, errors.ErrorMinioCheckBucketExistFailed) | |||||
} | |||||
return isExist, nil | |||||
} | |||||
func (m *minio) SetUserBucketsAccess(ctx context.Context, userName string, buckets []string) error { | |||||
rs := make([]string, 0) | |||||
for _, b := range buckets { | |||||
rs = append(rs, fmt.Sprintf(`"arn:aws:s3:::%s/*"`, b)) | |||||
} | |||||
policy := fmt.Sprintf(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:*"],"Effect": "Allow","Resource": [%s]}]}`, strings.Join(rs, ",")) | |||||
fmt.Println(policy) | |||||
err := m.adminClient.AddCannedPolicy(ctx, userName, []byte(policy)) | |||||
if err != nil { | |||||
return errors.Errorf(nil, errors.ErrorMinioOperationFailed) | |||||
} | |||||
err = m.adminClient.SetPolicy(ctx, userName, userName, false) | |||||
if err != nil { | |||||
return errors.Errorf(nil, errors.ErrorMinioOperationFailed) | |||||
} | |||||
return nil | |||||
} |
@@ -1,6 +1,7 @@ | |||||
package minio_test | package minio_test | ||||
import ( | import ( | ||||
"context" | |||||
"fmt" | "fmt" | ||||
"server/base-server/internal/conf" | "server/base-server/internal/conf" | ||||
"server/base-server/internal/data/minio" | "server/base-server/internal/data/minio" | ||||
@@ -8,6 +9,8 @@ import ( | |||||
"server/common/utils" | "server/common/utils" | ||||
"testing" | "testing" | ||||
"github.com/minio/madmin-go" | |||||
"server/common/log" | "server/common/log" | ||||
"github.com/go-kratos/kratos/v2/config" | "github.com/go-kratos/kratos/v2/config" | ||||
@@ -114,3 +117,22 @@ func TestPresignedUploadObject(t *testing.T) { | |||||
logger.Print(url.String()) | logger.Print(url.String()) | ||||
} | } | ||||
func TestUser(t *testing.T) { | |||||
ctx := context.Background() | |||||
madmClnt, err := madmin.New("192.168.202.73:31311", "minioadmin", "minioadmin", false) | |||||
if err != nil { | |||||
t.Fatal(err) | |||||
} | |||||
if err = madmClnt.AddCannedPolicy(ctx, "lfj", []byte(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:*"],"Effect": "Allow","Resource": ["arn:aws:s3:::lfj"]}]}`)); err != nil { | |||||
t.Fatal(err) | |||||
} | |||||
if err = madmClnt.AddUser(ctx, "lfj", "123456789"); err != nil { | |||||
t.Fatal(err) | |||||
} | |||||
if err = madmClnt.SetPolicy(ctx, "lfj", "lfj", false); err != nil { | |||||
panic(err) | |||||
} | |||||
} |
@@ -210,7 +210,6 @@ func (s *billingService) Recharge(ctx context.Context, req *api.RechargeRequest) | |||||
if err != nil { | if err != nil { | ||||
return err | return err | ||||
} | } | ||||
err = s.data.BillingDao.UpdateBillingOwnerSelective(ctx, ownerKey, &model.BillingOwner{Amount: owner.Amount + req.Amount}) | err = s.data.BillingDao.UpdateBillingOwnerSelective(ctx, ownerKey, &model.BillingOwner{Amount: owner.Amount + req.Amount}) | ||||
if err != nil { | if err != nil { | ||||
return err | return err | ||||
@@ -12,9 +12,12 @@ import ( | |||||
"server/common/constant" | "server/common/constant" | ||||
"server/common/errors" | "server/common/errors" | ||||
"server/common/utils" | "server/common/utils" | ||||
"strconv" | |||||
"strings" | "strings" | ||||
"time" | "time" | ||||
"k8s.io/utils/strings/slices" | |||||
vcBus "volcano.sh/apis/pkg/apis/bus/v1alpha1" | vcBus "volcano.sh/apis/pkg/apis/bus/v1alpha1" | ||||
"server/common/log" | "server/common/log" | ||||
@@ -66,9 +69,15 @@ const ( | |||||
nodeActionLabelNotebookId = "nodebook.octopus.dev/id" | nodeActionLabelNotebookId = "nodebook.octopus.dev/id" | ||||
nodeActionLabelImageId = "image.octopus.dev/id" | nodeActionLabelImageId = "image.octopus.dev/id" | ||||
kubeAnnotationsProxyBodySize = "nginx.ingress.kubernetes.io/proxy-body-size" | kubeAnnotationsProxyBodySize = "nginx.ingress.kubernetes.io/proxy-body-size" | ||||
jpyCommand = "jupyter lab --no-browser --ip=0.0.0.0 --allow-root --notebook-dir='%s' --port=8888 --LabApp.token='' --LabApp.allow_origin='*' --LabApp.base_url=$OCTOPUS_JPY_BASE_URL" | |||||
envNotebookBaseUrl = "OCTOPUS_NOTEBOOK_BASE_URL" | |||||
envNotebookPort = "OCTOPUS_NOTEBOOK_PORT" | |||||
) | ) | ||||
func buildCommand(nbDir string) string { | |||||
c := `! [ -x "$(command -v jupyter)" ] && pip install jupyterlab==3 -i https://pypi.tuna.tsinghua.edu.cn/simple;jupyter lab --no-browser --ip=0.0.0.0 --allow-root --notebook-dir='%s' --port=$%s --LabApp.token='' --LabApp.allow_origin='*' --LabApp.base_url=$%s;` | |||||
return fmt.Sprintf(c, nbDir, envNotebookPort, envNotebookBaseUrl) | |||||
} | |||||
func buildTaskName(idx int) string { | func buildTaskName(idx int) string { | ||||
return fmt.Sprintf("%s%d", k8sTaskNamePrefix, idx) | return fmt.Sprintf("%s%d", k8sTaskNamePrefix, idx) | ||||
} | } | ||||
@@ -282,15 +291,27 @@ func (s *developService) checkPermAndAssign(ctx context.Context, nb *model.Noteb | |||||
} | } | ||||
} | } | ||||
if (user.User.Permission == nil || !user.User.Permission.MountExternalStorage) && len(nb.Mounts) > 0 { | |||||
return nil, errors.Errorf(nil, errors.ErrorTrainMountExternalForbidden) | |||||
for _, m := range nb.Mounts { | |||||
if m.Octopus != nil { | |||||
if !slices.Contains(user.User.Buckets, m.Octopus.Bucket) { | |||||
return nil, errors.Errorf(nil, errors.ErrorInvalidRequestParameter) | |||||
} | |||||
} | |||||
if m.Nfs != nil && (user.User.Permission == nil || !user.User.Permission.MountExternalStorage) { | |||||
return nil, errors.Errorf(nil, errors.ErrorNotebookMountExternalForbidden) | |||||
} | |||||
} | } | ||||
command := "" | command := "" | ||||
if nb.AlgorithmId != "" { | |||||
command = fmt.Sprintf(jpyCommand, s.conf.Service.DockerCodePath) | |||||
if nb.Command != "" { | |||||
command = nb.Command | |||||
} else { | } else { | ||||
command = fmt.Sprintf(jpyCommand, s.conf.Service.DockerUserHomePath) | |||||
if nb.AlgorithmId != "" { | |||||
command = buildCommand(s.conf.Service.DockerCodePath) | |||||
} else { | |||||
command = buildCommand(s.conf.Service.DockerUserHomePath) | |||||
} | |||||
} | } | ||||
return &startJobInfo{ | return &startJobInfo{ | ||||
@@ -529,10 +550,10 @@ func (s *developService) StartNotebook(ctx context.Context, req *api.StartNotebo | |||||
} | } | ||||
func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJob *model.NotebookJob, startJobInfo *startJobInfo) error { | func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJob *model.NotebookJob, startJobInfo *startJobInfo) error { | ||||
volume := "data" | |||||
volumeMounts := []v1.VolumeMount{ | volumeMounts := []v1.VolumeMount{ | ||||
{ | { | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: s.conf.Service.DockerUserHomePath, | MountPath: s.conf.Service.DockerUserHomePath, | ||||
SubPath: common.GetUserHomePath(nb.UserId), | SubPath: common.GetUserHomePath(nb.UserId), | ||||
ReadOnly: false, | ReadOnly: false, | ||||
@@ -545,7 +566,7 @@ func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJo | |||||
if startJobInfo.algorithmPath != "" { | if startJobInfo.algorithmPath != "" { | ||||
volumeMounts = append(volumeMounts, v1.VolumeMount{ | volumeMounts = append(volumeMounts, v1.VolumeMount{ | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: s.conf.Service.DockerCodePath, | MountPath: s.conf.Service.DockerCodePath, | ||||
SubPath: startJobInfo.algorithmPath, | SubPath: startJobInfo.algorithmPath, | ||||
ReadOnly: false, | ReadOnly: false, | ||||
@@ -554,7 +575,7 @@ func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJo | |||||
if startJobInfo.datasetPath != "" { | if startJobInfo.datasetPath != "" { | ||||
volumeMounts = append(volumeMounts, v1.VolumeMount{ | volumeMounts = append(volumeMounts, v1.VolumeMount{ | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: s.conf.Service.DockerDatasetPath, | MountPath: s.conf.Service.DockerDatasetPath, | ||||
SubPath: startJobInfo.datasetPath, | SubPath: startJobInfo.datasetPath, | ||||
ReadOnly: true, | ReadOnly: true, | ||||
@@ -563,7 +584,7 @@ func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJo | |||||
volumes := []v1.Volume{ | volumes := []v1.Volume{ | ||||
{ | { | ||||
Name: "data", | |||||
Name: volume, | |||||
VolumeSource: v1.VolumeSource{ | VolumeSource: v1.VolumeSource{ | ||||
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ | PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ | ||||
ClaimName: common.GetStoragePersistentVolumeChaim(nb.UserId), | ClaimName: common.GetStoragePersistentVolumeChaim(nb.UserId), | ||||
@@ -595,7 +616,7 @@ func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJo | |||||
}) | }) | ||||
} | } | ||||
vs, vms := common.GetVolumes(nb.Mounts) | |||||
vs, vms := common.GetVolumes(nb.Mounts, volume) | |||||
if len(vms) > 0 { | if len(vms) > 0 { | ||||
volumeMounts = append(volumeMounts, vms...) | volumeMounts = append(volumeMounts, vms...) | ||||
volumes = append(volumes, vs...) | volumes = append(volumes, vs...) | ||||
@@ -607,6 +628,16 @@ func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJo | |||||
task := typeJob.TaskSpec{} | task := typeJob.TaskSpec{} | ||||
task.Name = taskName | task.Name = taskName | ||||
task.Replicas = 1 | task.Replicas = 1 | ||||
envs := []v1.EnvVar{{ | |||||
Name: envNotebookBaseUrl, | |||||
Value: buildNotebookUrl(nbJob.Id, i), | |||||
}, { | |||||
Name: envNotebookPort, | |||||
Value: strconv.Itoa(servicePort), | |||||
}} | |||||
for k, v := range nb.Envs { | |||||
envs = append(envs, v1.EnvVar{Name: k, Value: v}) | |||||
} | |||||
task.Template = v1.PodTemplateSpec{ | task.Template = v1.PodTemplateSpec{ | ||||
ObjectMeta: metav1.ObjectMeta{ | ObjectMeta: metav1.ObjectMeta{ | ||||
Labels: map[string]string{"volcano.sh/task-spec": buildTaskName(i)}, | Labels: map[string]string{"volcano.sh/task-spec": buildTaskName(i)}, | ||||
@@ -623,10 +654,7 @@ func (s *developService) submitJob(ctx context.Context, nb *model.Notebook, nbJo | |||||
Limits: startJobInfo.resources, | Limits: startJobInfo.resources, | ||||
}, | }, | ||||
VolumeMounts: volumeMounts, | VolumeMounts: volumeMounts, | ||||
Env: []v1.EnvVar{{ | |||||
Name: s.conf.Service.Develop.JpyBaseUrlEnv, | |||||
Value: buildNotebookUrl(nbJob.Id, i), | |||||
}}, | |||||
Env: envs, | |||||
}, | }, | ||||
}, | }, | ||||
NodeSelector: startJobInfo.nodeSelectors, | NodeSelector: startJobInfo.nodeSelectors, | ||||
@@ -19,6 +19,8 @@ import ( | |||||
"strings" | "strings" | ||||
"time" | "time" | ||||
"k8s.io/utils/strings/slices" | |||||
typeJob "volcano.sh/apis/pkg/apis/batch/v1alpha1" | typeJob "volcano.sh/apis/pkg/apis/batch/v1alpha1" | ||||
"encoding/json" | "encoding/json" | ||||
@@ -437,8 +439,16 @@ func (s *trainJobService) checkPermForJob(ctx context.Context, job *model.TrainJ | |||||
} | } | ||||
} | } | ||||
if (user.User.Permission == nil || !user.User.Permission.MountExternalStorage) && len(job.Mounts) > 0 { | |||||
return nil, errors.Errorf(nil, errors.ErrorTrainMountExternalForbidden) | |||||
for _, m := range job.Mounts { | |||||
if m.Octopus != nil { | |||||
if !slices.Contains(user.User.Buckets, m.Octopus.Bucket) { | |||||
return nil, errors.Errorf(nil, errors.ErrorInvalidRequestParameter) | |||||
} | |||||
} | |||||
if m.Nfs != nil && (user.User.Permission == nil || !user.User.Permission.MountExternalStorage) { | |||||
return nil, errors.Errorf(nil, errors.ErrorTrainMountExternalForbidden) | |||||
} | |||||
} | } | ||||
return &startJobInfo{ | return &startJobInfo{ | ||||
@@ -473,6 +483,7 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
} | } | ||||
}() | }() | ||||
volume := "data" | |||||
minAvailable := 0 | minAvailable := 0 | ||||
tasks := make([]typeJob.TaskSpec, 0) | tasks := make([]typeJob.TaskSpec, 0) | ||||
@@ -482,13 +493,13 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
//挂载卷 | //挂载卷 | ||||
volumeMounts := []v1.VolumeMount{ | volumeMounts := []v1.VolumeMount{ | ||||
{ | { | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: s.conf.Service.DockerModelPath, | MountPath: s.conf.Service.DockerModelPath, | ||||
SubPath: s.getModelSubPath(job), | SubPath: s.getModelSubPath(job), | ||||
ReadOnly: false, | ReadOnly: false, | ||||
}, | }, | ||||
{ | { | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: s.conf.Service.DockerUserHomePath, | MountPath: s.conf.Service.DockerUserHomePath, | ||||
SubPath: common.GetUserHomePath(job.UserId), | SubPath: common.GetUserHomePath(job.UserId), | ||||
ReadOnly: false, | ReadOnly: false, | ||||
@@ -502,7 +513,7 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
if startJobInfo.algorithmPath != "" { | if startJobInfo.algorithmPath != "" { | ||||
volumeMounts = append(volumeMounts, | volumeMounts = append(volumeMounts, | ||||
v1.VolumeMount{ | v1.VolumeMount{ | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: readonlyCodeDir, | MountPath: readonlyCodeDir, | ||||
SubPath: startJobInfo.algorithmPath, | SubPath: startJobInfo.algorithmPath, | ||||
ReadOnly: true, | ReadOnly: true, | ||||
@@ -518,7 +529,7 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
if startJobInfo.datasetPath != "" { | if startJobInfo.datasetPath != "" { | ||||
volumeMounts = append(volumeMounts, | volumeMounts = append(volumeMounts, | ||||
v1.VolumeMount{ | v1.VolumeMount{ | ||||
Name: "data", | |||||
Name: volume, | |||||
MountPath: s.conf.Service.DockerDatasetPath, | MountPath: s.conf.Service.DockerDatasetPath, | ||||
SubPath: startJobInfo.datasetPath, | SubPath: startJobInfo.datasetPath, | ||||
ReadOnly: true, | ReadOnly: true, | ||||
@@ -527,7 +538,7 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
volumes := []v1.Volume{ | volumes := []v1.Volume{ | ||||
{ | { | ||||
Name: "data", | |||||
Name: volume, | |||||
VolumeSource: v1.VolumeSource{ | VolumeSource: v1.VolumeSource{ | ||||
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ | PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ | ||||
ClaimName: common.GetStoragePersistentVolumeChaim(job.UserId), | ClaimName: common.GetStoragePersistentVolumeChaim(job.UserId), | ||||
@@ -548,7 +559,7 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
}, | }, | ||||
} | } | ||||
vs, vms := common.GetVolumes(job.Mounts) | |||||
vs, vms := common.GetVolumes(job.Mounts, volume) | |||||
if len(vms) > 0 { | if len(vms) > 0 { | ||||
volumeMounts = append(volumeMounts, vms...) | volumeMounts = append(volumeMounts, vms...) | ||||
volumes = append(volumes, vs...) | volumes = append(volumes, vs...) | ||||
@@ -570,6 +581,11 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
}, | }, | ||||
}) | }) | ||||
} | } | ||||
envs := make([]v1.EnvVar, 0) | |||||
for k, v := range i.Envs { | |||||
envs = append(envs, v1.EnvVar{Name: k, Value: v}) | |||||
} | |||||
//pod template | //pod template | ||||
task := typeJob.TaskSpec{ | task := typeJob.TaskSpec{ | ||||
CompletionPolicy: typeJob.CompletionPolicy{ | CompletionPolicy: typeJob.CompletionPolicy{ | ||||
@@ -595,6 +611,7 @@ func (s *trainJobService) submitJob(ctx context.Context, job *model.TrainJob, st | |||||
}, | }, | ||||
VolumeMounts: volumeMounts, | VolumeMounts: volumeMounts, | ||||
Command: s.buildCmd(job, i), | Command: s.buildCmd(job, i), | ||||
Env: envs, | |||||
}, | }, | ||||
}, | }, | ||||
NodeSelector: startJobInfo.specs[i.ResourceSpecId].nodeSelectors, | NodeSelector: startJobInfo.specs[i.ResourceSpecId].nodeSelectors, | ||||
@@ -94,6 +94,8 @@ func (s *UserService) ListUser(ctx context.Context, req *api.ListUserRequest) (* | |||||
ResourcePools: user.ResourcePools, | ResourcePools: user.ResourcePools, | ||||
Desc: user.Desc, | Desc: user.Desc, | ||||
Permission: (*v1.UserPermission)(user.Permission), | Permission: (*v1.UserPermission)(user.Permission), | ||||
MinioUserName: user.MinioUserName, | |||||
Buckets: user.Buckets, | |||||
} | } | ||||
users[idx] = item | users[idx] = item | ||||
} | } | ||||
@@ -161,6 +163,8 @@ func (s *UserService) FindUser(ctx context.Context, req *api.FindUserRequest) (* | |||||
ResourcePools: user.ResourcePools, | ResourcePools: user.ResourcePools, | ||||
Desc: user.Desc, | Desc: user.Desc, | ||||
Permission: (*v1.UserPermission)(user.Permission), | Permission: (*v1.UserPermission)(user.Permission), | ||||
MinioUserName: user.MinioUserName, | |||||
Buckets: user.Buckets, | |||||
}, | }, | ||||
} | } | ||||
@@ -447,3 +451,61 @@ func (s *UserService) UpdateUserFtpAccount(ctx context.Context, req *api.UpdateU | |||||
return &api.UpdateUserFtpAccountReply{}, nil | return &api.UpdateUserFtpAccountReply{}, nil | ||||
} | } | ||||
func (s *UserService) UpdateUserMinioAccount(ctx context.Context, req *api.UpdateUserMinioAccountRequest) (*api.UpdateUserMinioAccountReply, error) { | |||||
user, err := s.data.UserDao.Find(ctx, &model.UserQuery{Id: req.UserId}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if user.MinioUserName != "" && user.MinioUserName != req.MinioUserName { | |||||
return nil, errors.Errorf(nil, errors.ErrorUserChangeMinioUsernameForbidden) | |||||
} | |||||
err = s.data.Minio.CreateOrUpdateAccount(ctx, req.MinioUserName, req.MinioPassword) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
_, err = s.data.UserDao.Update(ctx, &model.UserUpdateCond{Id: req.UserId}, &model.UserUpdate{MinioUserName: req.MinioUserName}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return &api.UpdateUserMinioAccountReply{}, nil | |||||
} | |||||
func (s *UserService) UpdateUserMinioBuckets(ctx context.Context, req *api.UpdateUserMinioBucketsRequest) (*api.UpdateUserMinioBucketsReply, error) { | |||||
user, err := s.data.UserDao.Find(ctx, &model.UserQuery{Id: req.UserId}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if user.MinioUserName == "" { | |||||
return nil, errors.Errorf(nil, errors.ErrorUserMinioUsernameNotExist) | |||||
} | |||||
for _, b := range req.Buckets { | |||||
isExist, err := s.data.Minio.BucketExists(ctx, b) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if !isExist { | |||||
err := s.data.Minio.CreateBucket(b) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
} | |||||
} | |||||
err = s.data.Minio.SetUserBucketsAccess(ctx, user.MinioUserName, req.Buckets) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
_, err = s.data.UserDao.Update(ctx, &model.UserUpdateCond{Id: req.UserId}, &model.UserUpdate{Buckets: req.Buckets}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return &api.UpdateUserMinioBucketsReply{}, nil | |||||
} |
@@ -9,9 +9,14 @@ message Mount { | |||||
string server = 1; | string server = 1; | ||||
string path = 2; | string path = 2; | ||||
} | } | ||||
message Octopus { | |||||
string bucket = 1; | |||||
string object = 2; | |||||
} | |||||
string containerPath = 1; | string containerPath = 1; | ||||
bool readOnly = 2; | bool readOnly = 2; | ||||
Nfs nfs = 3; | Nfs nfs = 3; | ||||
Octopus octopus = 4; | |||||
} | } | ||||
message UserPermission { | message UserPermission { | ||||
@@ -36,6 +36,9 @@ const ( | |||||
ErrorMinioListObjectFailed = 10038 // 查看对象列表失败 | ErrorMinioListObjectFailed = 10038 // 查看对象列表失败 | ||||
ErrorMinioCheckObjectExistFailed = 10039 // 查看对象失败 | ErrorMinioCheckObjectExistFailed = 10039 // 查看对象失败 | ||||
ErrorMinioCheckObjectNotExisted = 10040 // 对象不存在 | ErrorMinioCheckObjectNotExisted = 10040 // 对象不存在 | ||||
ErrorMinioCreateAccountFailed = 10041 // 创建用户失败 | |||||
ErrorMinioOperationFailed = 10042 // 操作失败 | |||||
// db操作相关错误 | // db操作相关错误 | ||||
ErrorDBInitFailed = 10050 // db初始化失败 | ErrorDBInitFailed = 10050 // db初始化失败 | ||||
ErrorDBFindFailed = 10051 // db列表查询失败 | ErrorDBFindFailed = 10051 // db列表查询失败 | ||||
@@ -160,15 +163,17 @@ const ( | |||||
ErrorTokenRenew = 16010 // 认证失败,token被重置 | ErrorTokenRenew = 16010 // 认证失败,token被重置 | ||||
// 用户管理 | // 用户管理 | ||||
ErrorUserAccountNotExisted = 16020 // 用户不存在 | |||||
ErrorUserAccountExisted = 16021 // 用户已存在 | |||||
ErrorUserIdNotRight = 16022 // 用户id错误 | |||||
ErrorWorkSpaceExisted = 16023 // 空间已存在 | |||||
ErrorWorkSpaceNotExist = 16024 // 空间不存在 | |||||
ErrorUserWorkSpaceNoPermission = 16025 // 用户无空间权限 | |||||
ErrorWorkSpaceResourcePoolBound = 16026 // 空间与资源池已绑定 | |||||
ErrorUserConfigKeyNotExist = 16027 // 配置项不存在 | |||||
ErrorUserAccountBinded = 16028 // 账号已绑定 | |||||
ErrorUserAccountNotExisted = 16020 // 用户不存在 | |||||
ErrorUserAccountExisted = 16021 // 用户已存在 | |||||
ErrorUserIdNotRight = 16022 // 用户id错误 | |||||
ErrorWorkSpaceExisted = 16023 // 空间已存在 | |||||
ErrorWorkSpaceNotExist = 16024 // 空间不存在 | |||||
ErrorUserWorkSpaceNoPermission = 16025 // 用户无空间权限 | |||||
ErrorWorkSpaceResourcePoolBound = 16026 // 空间与资源池已绑定 | |||||
ErrorUserConfigKeyNotExist = 16027 // 配置项不存在 | |||||
ErrorUserAccountBinded = 16028 // 账号已绑定 | |||||
ErrorUserChangeMinioUsernameForbidden = 16029 // 不能修改minio用户名 | |||||
ErrorUserMinioUsernameNotExist = 16030 // minio用户不存在 | |||||
/* 17001~18000 计费管理错误*/ | /* 17001~18000 计费管理错误*/ | ||||
ErrorBillingObtainLockFailed = 17001 // 获取锁失败 | ErrorBillingObtainLockFailed = 17001 // 获取锁失败 | ||||
@@ -262,6 +267,9 @@ var codeMsgMap = map[int]codeMsg{ | |||||
ErrorMinioListObjectFailed: {codeType: Internal, msg: "minio list object failed"}, | ErrorMinioListObjectFailed: {codeType: Internal, msg: "minio list object failed"}, | ||||
ErrorMinioCheckObjectExistFailed: {codeType: Internal, msg: "minio check object failed"}, | ErrorMinioCheckObjectExistFailed: {codeType: Internal, msg: "minio check object failed"}, | ||||
ErrorMinioCheckObjectNotExisted: {codeType: NotFound, msg: "minio object not exist"}, | ErrorMinioCheckObjectNotExisted: {codeType: NotFound, msg: "minio object not exist"}, | ||||
ErrorMinioCreateAccountFailed: {codeType: Internal, msg: "minio create account failed"}, | |||||
ErrorMinioOperationFailed: {codeType: Internal, msg: "minio operation failed"}, | |||||
// db 操作相关错误 | // db 操作相关错误 | ||||
ErrorDBInitFailed: {codeType: Internal, msg: "db init failed"}, | ErrorDBInitFailed: {codeType: Internal, msg: "db init failed"}, | ||||
ErrorDBFindFailed: {codeType: Internal, msg: "db find failed"}, | ErrorDBFindFailed: {codeType: Internal, msg: "db find failed"}, | ||||
@@ -377,15 +385,17 @@ var codeMsgMap = map[int]codeMsg{ | |||||
ErrorAuthenticationFailed: {codeType: Unauthorized, msg: "user account authentication failed"}, | ErrorAuthenticationFailed: {codeType: Unauthorized, msg: "user account authentication failed"}, | ||||
ErrorTokenRenew: {codeType: InvalidArgument, msg: "token renew"}, | ErrorTokenRenew: {codeType: InvalidArgument, msg: "token renew"}, | ||||
// 用户管理 | // 用户管理 | ||||
ErrorUserAccountNotExisted: {codeType: NotFound, msg: "user account not exists"}, | |||||
ErrorUserAccountExisted: {codeType: AlreadyExists, msg: "user account exists"}, | |||||
ErrorUserAccountBinded: {codeType: AlreadyExists, msg: "user account exists"}, | |||||
ErrorUserIdNotRight: {codeType: InvalidArgument, msg: "userid not valid"}, | |||||
ErrorWorkSpaceExisted: {codeType: AlreadyExists, msg: "workspace existed"}, | |||||
ErrorWorkSpaceNotExist: {codeType: NotFound, msg: "workspace not existed"}, | |||||
ErrorUserWorkSpaceNoPermission: {codeType: PermissionDenied, msg: "user workspace permission deny"}, | |||||
ErrorWorkSpaceResourcePoolBound: {codeType: ResourceExhausted, msg: "workspace and resource pool had bind"}, | |||||
ErrorUserConfigKeyNotExist: {codeType: InvalidArgument, msg: "user config key not exist"}, | |||||
ErrorUserAccountNotExisted: {codeType: NotFound, msg: "user account not exists"}, | |||||
ErrorUserAccountExisted: {codeType: AlreadyExists, msg: "user account exists"}, | |||||
ErrorUserAccountBinded: {codeType: AlreadyExists, msg: "user account exists"}, | |||||
ErrorUserIdNotRight: {codeType: InvalidArgument, msg: "userid not valid"}, | |||||
ErrorWorkSpaceExisted: {codeType: AlreadyExists, msg: "workspace existed"}, | |||||
ErrorWorkSpaceNotExist: {codeType: NotFound, msg: "workspace not existed"}, | |||||
ErrorUserWorkSpaceNoPermission: {codeType: PermissionDenied, msg: "user workspace permission deny"}, | |||||
ErrorWorkSpaceResourcePoolBound: {codeType: ResourceExhausted, msg: "workspace and resource pool had bind"}, | |||||
ErrorUserConfigKeyNotExist: {codeType: InvalidArgument, msg: "user config key not exist"}, | |||||
ErrorUserChangeMinioUsernameForbidden: {codeType: InvalidArgument, msg: "change minio username forbidden"}, | |||||
ErrorUserMinioUsernameNotExist: {codeType: InvalidArgument, msg: "minio username not exist"}, | |||||
/* 17001~18000 机时管理错误*/ | /* 17001~18000 机时管理错误*/ | ||||
ErrorBillingObtainLockFailed: {codeType: Internal, msg: "billing obtain lock failed"}, | ErrorBillingObtainLockFailed: {codeType: Internal, msg: "billing obtain lock failed"}, | ||||
@@ -6,13 +6,13 @@ import ( | |||||
"fmt" | "fmt" | ||||
) | ) | ||||
type SqlJson map[string]string | |||||
type Map map[string]string | |||||
func (r SqlJson) Value() (driver.Value, error) { | |||||
func (r Map) Value() (driver.Value, error) { | |||||
return json.Marshal(r) | return json.Marshal(r) | ||||
} | } | ||||
func (r *SqlJson) Scan(input interface{}) error { | |||||
func (r *Map) Scan(input interface{}) error { | |||||
switch v := input.(type) { | switch v := input.(type) { | ||||
case []byte: | case []byte: | ||||
return json.Unmarshal(input.([]byte), r) | return json.Unmarshal(input.([]byte), r) | ||||
@@ -21,6 +21,16 @@ func (r *SqlJson) Scan(input interface{}) error { | |||||
} | } | ||||
} | } | ||||
type Strings []string | |||||
func (r Strings) Value() (driver.Value, error) { | |||||
return Value(r) | |||||
} | |||||
func (r *Strings) Scan(input interface{}) error { | |||||
return Scan(r, input) | |||||
} | |||||
func Value(r interface{}) (driver.Value, error) { | func Value(r interface{}) (driver.Value, error) { | ||||
return json.Marshal(r) | return json.Marshal(r) | ||||
} | } | ||||
@@ -18,14 +18,15 @@ require ( | |||||
github.com/imdario/mergo v0.3.12 | github.com/imdario/mergo v0.3.12 | ||||
github.com/influxdata/influxdb v1.9.4 | github.com/influxdata/influxdb v1.9.4 | ||||
github.com/jinzhu/copier v0.2.5 | github.com/jinzhu/copier v0.2.5 | ||||
github.com/minio/minio-go/v7 v7.0.11 | |||||
github.com/minio/madmin-go v1.3.8 | |||||
github.com/minio/minio-go/v7 v7.0.23 | |||||
github.com/seldonio/seldon-core/operator v1.11.2 | github.com/seldonio/seldon-core/operator v1.11.2 | ||||
github.com/sony/sonyflake v1.0.0 | github.com/sony/sonyflake v1.0.0 | ||||
golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc | |||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 | |||||
golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 | golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 | ||||
golang.org/x/text v0.3.6 | golang.org/x/text v0.3.6 | ||||
gonum.org/v1/gonum v0.8.2 | gonum.org/v1/gonum v0.8.2 | ||||
google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de | |||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c | |||||
google.golang.org/grpc v1.40.0 | google.golang.org/grpc v1.40.0 | ||||
google.golang.org/protobuf v1.27.1 | google.golang.org/protobuf v1.27.1 | ||||
gopkg.in/errgo.v2 v2.1.0 | gopkg.in/errgo.v2 v2.1.0 | ||||
@@ -37,14 +38,17 @@ require ( | |||||
k8s.io/api v0.22.1 | k8s.io/api v0.22.1 | ||||
k8s.io/apimachinery v0.22.1 | k8s.io/apimachinery v0.22.1 | ||||
k8s.io/client-go v12.0.0+incompatible | k8s.io/client-go v12.0.0+incompatible | ||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176 | |||||
nodeagent v0.0.0-00010101000000-000000000000 | nodeagent v0.0.0-00010101000000-000000000000 | ||||
volcano.sh/apis v0.0.0-20210518032656-21e2239e42bc | volcano.sh/apis v0.0.0-20210518032656-21e2239e42bc | ||||
) | ) | ||||
require ( | require ( | ||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect | |||||
cloud.google.com/go v0.81.0 // indirect | |||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect | |||||
github.com/Microsoft/go-winio v0.5.1 // indirect | github.com/Microsoft/go-winio v0.5.1 // indirect | ||||
github.com/Microsoft/hcsshim v0.9.1 // indirect | github.com/Microsoft/hcsshim v0.9.1 // indirect | ||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect | |||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 // indirect | github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 // indirect | ||||
github.com/apache/arrow/go/arrow v0.0.0-20200923215132-ac86123a3f01 // indirect | github.com/apache/arrow/go/arrow v0.0.0-20200923215132-ac86123a3f01 // indirect | ||||
github.com/benbjohnson/immutable v0.2.1 // indirect | github.com/benbjohnson/immutable v0.2.1 // indirect | ||||
@@ -60,6 +64,7 @@ require ( | |||||
github.com/docker/go-units v0.4.0 // indirect | github.com/docker/go-units v0.4.0 // indirect | ||||
github.com/dustin/go-humanize v1.0.0 // indirect | github.com/dustin/go-humanize v1.0.0 // indirect | ||||
github.com/go-logr/logr v0.4.0 // indirect | github.com/go-logr/logr v0.4.0 // indirect | ||||
github.com/go-ole/go-ole v1.2.4 // indirect | |||||
github.com/go-sql-driver/mysql v1.5.0 // indirect | github.com/go-sql-driver/mysql v1.5.0 // indirect | ||||
github.com/gofrs/uuid v3.3.0+incompatible // indirect | github.com/gofrs/uuid v3.3.0+incompatible // indirect | ||||
github.com/gogo/protobuf v1.3.2 // indirect | github.com/gogo/protobuf v1.3.2 // indirect | ||||
@@ -68,68 +73,78 @@ require ( | |||||
github.com/google/go-cmp v0.5.6 // indirect | github.com/google/go-cmp v0.5.6 // indirect | ||||
github.com/google/gofuzz v1.2.0 // indirect | github.com/google/gofuzz v1.2.0 // indirect | ||||
github.com/googleapis/gnostic v0.5.5 // indirect | github.com/googleapis/gnostic v0.5.5 // indirect | ||||
github.com/hashicorp/golang-lru v0.5.4 // indirect | |||||
github.com/influxdata/flux v0.127.3 // indirect | |||||
github.com/influxdata/influxql v1.1.1-0.20210223160523-b6ab99450c93 // indirect | |||||
github.com/jinzhu/inflection v1.0.0 // indirect | |||||
github.com/jinzhu/now v1.1.2 // indirect | |||||
github.com/json-iterator/go v1.1.11 // indirect | |||||
github.com/kedacore/keda v0.0.0-20200911122749-717aab81817f // indirect | |||||
github.com/klauspost/compress v1.13.5 // indirect | |||||
github.com/klauspost/cpuid v1.3.1 // indirect | |||||
github.com/klauspost/cpuid/v2 v2.0.4 // indirect | |||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect | |||||
github.com/minio/argon2 v1.0.0 // indirect | |||||
github.com/minio/md5-simd v1.1.0 // indirect | |||||
github.com/minio/sha256-simd v1.0.0 // indirect | |||||
github.com/mitchellh/go-homedir v1.1.0 // indirect | |||||
github.com/moby/sys/mount v0.3.0 // indirect | |||||
github.com/moby/sys/mountinfo v0.5.0 // indirect | |||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 // indirect | |||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | |||||
github.com/modern-go/reflect2 v1.0.1 // indirect | |||||
github.com/morikuni/aec v1.0.0 // indirect | |||||
github.com/opencontainers/go-digest v1.0.0 // indirect | |||||
github.com/opencontainers/image-spec v1.0.2 // indirect | |||||
github.com/opencontainers/runc v1.0.2 // indirect | |||||
github.com/opentracing/opentracing-go v1.2.0 // indirect | |||||
github.com/philhofer/fwd v1.1.1 // indirect | |||||
github.com/pkg/errors v0.9.1 // indirect | |||||
github.com/prometheus/client_golang v1.11.0 // indirect | github.com/prometheus/client_golang v1.11.0 // indirect | ||||
github.com/prometheus/client_model v0.2.0 // indirect | |||||
github.com/prometheus/common v0.26.0 // indirect | |||||
github.com/prometheus/procfs v0.7.3 // indirect | |||||
github.com/rs/xid v1.2.1 // indirect | |||||
github.com/secure-io/sio-go v0.3.1 // indirect | |||||
github.com/sergi/go-diff v1.1.0 // indirect | |||||
github.com/shirou/gopsutil/v3 v3.21.6 // indirect | |||||
github.com/sirupsen/logrus v1.8.1 // indirect | |||||
github.com/spf13/pflag v1.0.5 // indirect | |||||
github.com/tinylib/msgp v1.1.3 // indirect | |||||
github.com/tklauser/go-sysconf v0.3.6 // indirect | |||||
github.com/tklauser/numcpus v0.2.2 // indirect | |||||
github.com/uber/jaeger-client-go v2.28.0+incompatible // indirect | |||||
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | |||||
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 // indirect | |||||
go.opencensus.io v0.23.0 // indirect | |||||
go.opentelemetry.io/otel v0.20.0 // indirect | |||||
go.opentelemetry.io/otel/metric v0.20.0 // indirect | |||||
go.opentelemetry.io/otel/trace v0.20.0 // indirect | |||||
go.uber.org/atomic v1.7.0 // indirect | |||||
go.uber.org/multierr v1.6.0 // indirect | |||||
go.uber.org/zap v1.19.0 // indirect | |||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect | |||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect | |||||
golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827 // indirect | |||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect | |||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect | golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect | ||||
golang.org/x/tools v0.1.5 // indirect | |||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect | |||||
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect | gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect | ||||
google.golang.org/api v0.44.0 // indirect | |||||
google.golang.org/appengine v1.6.7 // indirect | |||||
gopkg.in/evanphx/json-patch.v4 v4.9.0 // indirect | |||||
gopkg.in/inf.v0 v0.9.1 // indirect | |||||
gopkg.in/ini.v1 v1.62.0 // indirect | |||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect | |||||
k8s.io/apiextensions-apiserver v0.22.1 // indirect | k8s.io/apiextensions-apiserver v0.22.1 // indirect | ||||
k8s.io/component-base v0.22.1 // indirect | k8s.io/component-base v0.22.1 // indirect | ||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176 // indirect | |||||
github.com/hashicorp/golang-lru v0.5.4 // indirect | |||||
github.com/influxdata/flux v0.127.3 // indirect | |||||
github.com/influxdata/influxql v1.1.1-0.20210223160523-b6ab99450c93 // indirect | |||||
github.com/jinzhu/inflection v1.0.0 // indirect | |||||
github.com/jinzhu/now v1.1.2 // indirect | |||||
github.com/json-iterator/go v1.1.11 // indirect | |||||
github.com/kedacore/keda v0.0.0-20200911122749-717aab81817f // indirect | |||||
github.com/klauspost/cpuid v1.3.1 // indirect | |||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect | |||||
github.com/minio/md5-simd v1.1.0 // indirect | |||||
github.com/minio/sha256-simd v0.1.1 // indirect | |||||
github.com/mitchellh/go-homedir v1.1.0 // indirect | |||||
github.com/moby/sys/mount v0.3.0 // indirect | |||||
github.com/moby/sys/mountinfo v0.5.0 // indirect | |||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 // indirect | |||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | |||||
github.com/modern-go/reflect2 v1.0.1 // indirect | |||||
github.com/morikuni/aec v1.0.0 // indirect | |||||
github.com/opencontainers/go-digest v1.0.0 // indirect | |||||
github.com/opencontainers/image-spec v1.0.2 // indirect | |||||
github.com/opencontainers/runc v1.0.2 // indirect | |||||
github.com/opentracing/opentracing-go v1.2.0 // indirect | |||||
github.com/pkg/errors v0.9.1 // indirect | |||||
github.com/prometheus/client_model v0.2.0 // indirect | |||||
github.com/prometheus/common v0.26.0 // indirect | |||||
github.com/prometheus/procfs v0.6.0 // indirect | |||||
github.com/rs/xid v1.2.1 // indirect | |||||
github.com/sergi/go-diff v1.1.0 // indirect | |||||
github.com/sirupsen/logrus v1.8.1 // indirect | |||||
github.com/spf13/pflag v1.0.5 // indirect | |||||
github.com/uber/jaeger-client-go v2.28.0+incompatible // indirect | |||||
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | |||||
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 // indirect | |||||
go.opencensus.io v0.23.0 // indirect | |||||
go.opentelemetry.io/otel v0.20.0 // indirect | |||||
go.opentelemetry.io/otel/metric v0.20.0 // indirect | |||||
go.opentelemetry.io/otel/trace v0.20.0 // indirect | |||||
go.uber.org/atomic v1.7.0 // indirect | |||||
go.uber.org/multierr v1.6.0 // indirect | |||||
go.uber.org/zap v1.19.0 // indirect | |||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a // indirect | |||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect | |||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 // indirect | |||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect | |||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect | |||||
google.golang.org/appengine v1.6.7 // indirect | |||||
gopkg.in/evanphx/json-patch.v4 v4.9.0 // indirect | |||||
gopkg.in/inf.v0 v0.9.1 // indirect | |||||
gopkg.in/ini.v1 v1.57.0 // indirect | |||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect | |||||
k8s.io/klog/v2 v2.4.0 // indirect | |||||
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 // indirect | |||||
knative.dev/pkg v0.0.0-20210426101439-2a0fc657a712 // indirect | |||||
sigs.k8s.io/controller-runtime v0.10.0 // indirect | |||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.3 // indirect | |||||
sigs.k8s.io/yaml v1.2.0 // indirect | |||||
k8s.io/klog/v2 v2.4.0 // indirect | |||||
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 // indirect | |||||
knative.dev/pkg v0.0.0-20210426101439-2a0fc657a712 // indirect | |||||
sigs.k8s.io/controller-runtime v0.10.0 // indirect | |||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.3 // indirect | |||||
sigs.k8s.io/yaml v1.2.0 // indirect | |||||
) | ) | ||||
replace ( | replace ( | ||||
@@ -26,8 +26,12 @@ cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eA | |||||
cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= | cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= | ||||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= | cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= | ||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= | cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= | ||||
cloud.google.com/go v0.72.0 h1:eWRCuwubtDrCJG0oSUMgnsbD4CmPFQF2ei4OFbXvwww= | |||||
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= | cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= | ||||
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= | |||||
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= | |||||
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= | |||||
cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= | |||||
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= | |||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | ||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= | cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= | ||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | ||||
@@ -53,7 +57,6 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo | |||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= | cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= | ||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | ||||
cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= | cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= | ||||
cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= | |||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | ||||
code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= | code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= | ||||
collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= | collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= | ||||
@@ -162,7 +165,6 @@ github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxB | |||||
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | ||||
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= | github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= | ||||
github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= | github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= | ||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= | |||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= | github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= | ||||
github.com/Azure/go-autorest/autorest/to v0.1.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= | github.com/Azure/go-autorest/autorest/to v0.1.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= | ||||
github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= | github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= | ||||
@@ -247,6 +249,8 @@ github.com/Shopify/sarama v1.23.1/go.mod h1:XLH1GYJnLVE0XCr6KdJGVJRTwY30moWNJ4sE | |||||
github.com/Shopify/sarama v1.27.0/go.mod h1:aCdj6ymI8uyPEux1JJ9gcaDT6cinjGhNCAhs54taSUo= | github.com/Shopify/sarama v1.27.0/go.mod h1:aCdj6ymI8uyPEux1JJ9gcaDT6cinjGhNCAhs54taSUo= | ||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= | github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= | ||||
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= | github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= | ||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= | |||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= | |||||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= | github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= | ||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= | github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= | ||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= | github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= | ||||
@@ -321,11 +325,9 @@ github.com/aws/aws-sdk-go v1.34.18/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve | |||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= | github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= | ||||
github.com/aws/aws-sdk-go-v2 v1.3.2 h1:RQj8l98yKUm0UV2Wd3w/Ms+TXV9Rs1E6Kr5tRRMfyU4= | github.com/aws/aws-sdk-go-v2 v1.3.2 h1:RQj8l98yKUm0UV2Wd3w/Ms+TXV9Rs1E6Kr5tRRMfyU4= | ||||
github.com/aws/aws-sdk-go-v2 v1.3.2/go.mod h1:7OaACgj2SX3XGWnrIjGlJM22h6yD6MEWKvm7levnnM8= | github.com/aws/aws-sdk-go-v2 v1.3.2/go.mod h1:7OaACgj2SX3XGWnrIjGlJM22h6yD6MEWKvm7levnnM8= | ||||
github.com/aws/aws-sdk-go-v2/config v1.1.5 h1:imDWOGwlIrRpHLallJ9mli2SIQ4egtGKtFUFsuGRIaQ= | |||||
github.com/aws/aws-sdk-go-v2/config v1.1.5/go.mod h1:P3F1hku7qzC81txjwXnwOM6Ex6ezkU6+/557Teyb64E= | github.com/aws/aws-sdk-go-v2/config v1.1.5/go.mod h1:P3F1hku7qzC81txjwXnwOM6Ex6ezkU6+/557Teyb64E= | ||||
github.com/aws/aws-sdk-go-v2/credentials v1.1.5 h1:R9v/eN5cXv5yMLC619xRYl5PgCSuy5SarizmM7+qqSA= | github.com/aws/aws-sdk-go-v2/credentials v1.1.5 h1:R9v/eN5cXv5yMLC619xRYl5PgCSuy5SarizmM7+qqSA= | ||||
github.com/aws/aws-sdk-go-v2/credentials v1.1.5/go.mod h1:Ir1R6tPiR1/2y1hes8yOijFMz54hzSmgcmCDo6F45Qc= | github.com/aws/aws-sdk-go-v2/credentials v1.1.5/go.mod h1:Ir1R6tPiR1/2y1hes8yOijFMz54hzSmgcmCDo6F45Qc= | ||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6 h1:zoOz5V56jO/rGixsCDnrQtAzYRYM2hGA/43U6jVMFbo= | |||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6/go.mod h1:0+fWMitrmIpENiY8/1DyhdYPUCAPvd9UNz9mtCsEoLQ= | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6/go.mod h1:0+fWMitrmIpENiY8/1DyhdYPUCAPvd9UNz9mtCsEoLQ= | ||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.1.2 h1:Doa5wabOIDA0XZzBX5yCTAPGwDCVZ8Ux0wh29AUDmN4= | github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.1.2 h1:Doa5wabOIDA0XZzBX5yCTAPGwDCVZ8Ux0wh29AUDmN4= | ||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.1.2/go.mod h1:Azf567f5wBUfUbwpyJJnLM/geFFIzEulGR30L+nQZOE= | github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.1.2/go.mod h1:Azf567f5wBUfUbwpyJJnLM/geFFIzEulGR30L+nQZOE= | ||||
@@ -337,9 +339,7 @@ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2 h1:aU8H58DoYxNo8R1 | |||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2/go.mod h1:nnutjMLuna0s3GVY/MAkpLX03thyNER06gXvnMAPj5g= | github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2/go.mod h1:nnutjMLuna0s3GVY/MAkpLX03thyNER06gXvnMAPj5g= | ||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0 h1:VbwXUI3L0hyhVmrFxbDxrs6cBX8TNFX0YxCpooMNjvY= | github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0 h1:VbwXUI3L0hyhVmrFxbDxrs6cBX8TNFX0YxCpooMNjvY= | ||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0/go.mod h1:uwA7gs93Qcss43astPUb1eq4RyceNmYWAQjZFDOAMLo= | github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0/go.mod h1:uwA7gs93Qcss43astPUb1eq4RyceNmYWAQjZFDOAMLo= | ||||
github.com/aws/aws-sdk-go-v2/service/sso v1.1.5 h1:B7ec5wE4+3Ldkurmq0C4gfQFtElGTG+/iTpi/YPMzi4= | |||||
github.com/aws/aws-sdk-go-v2/service/sso v1.1.5/go.mod h1:bpGz0tidC4y39sZkQSkpO/J0tzWCMXHbw6FZ0j1GkWM= | github.com/aws/aws-sdk-go-v2/service/sso v1.1.5/go.mod h1:bpGz0tidC4y39sZkQSkpO/J0tzWCMXHbw6FZ0j1GkWM= | ||||
github.com/aws/aws-sdk-go-v2/service/sts v1.2.2 h1:fKw6QSGcFlvZCBPYx3fo4sL0HfTmaT06ZtMHJfQQNQQ= | |||||
github.com/aws/aws-sdk-go-v2/service/sts v1.2.2/go.mod h1:ssRzzJ2RZOVuKj2Vx1YE7ypfil/BIlgmQnCSW4DistU= | github.com/aws/aws-sdk-go-v2/service/sts v1.2.2/go.mod h1:ssRzzJ2RZOVuKj2Vx1YE7ypfil/BIlgmQnCSW4DistU= | ||||
github.com/aws/smithy-go v1.3.1 h1:xJFO4pK0y9J8fCl34uGsSJX5KNnGbdARDlA5BPhXnwE= | github.com/aws/smithy-go v1.3.1 h1:xJFO4pK0y9J8fCl34uGsSJX5KNnGbdARDlA5BPhXnwE= | ||||
github.com/aws/smithy-go v1.3.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= | github.com/aws/smithy-go v1.3.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= | ||||
@@ -359,6 +359,7 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB | |||||
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= | github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= | ||||
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= | github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= | ||||
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= | github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= | ||||
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= | |||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= | github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= | ||||
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | ||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | ||||
@@ -427,6 +428,7 @@ github.com/cloudevents/sdk-go v0.0.0-20190509003705-56931988abe3/go.mod h1:j1nZW | |||||
github.com/cloudevents/sdk-go v1.0.0/go.mod h1:3TkmM0cFqkhCHOq5JzzRU/RxRkwzoS8TZ+G448qVTog= | github.com/cloudevents/sdk-go v1.0.0/go.mod h1:3TkmM0cFqkhCHOq5JzzRU/RxRkwzoS8TZ+G448qVTog= | ||||
github.com/cloudevents/sdk-go/v2 v2.0.0/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoaAhqaRVnOr2rCU= | github.com/cloudevents/sdk-go/v2 v2.0.0/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoaAhqaRVnOr2rCU= | ||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | ||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | |||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | ||||
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= | github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= | ||||
@@ -637,6 +639,7 @@ github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4s | |||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | ||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | ||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= | github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= | ||||
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= | |||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | ||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | ||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= | github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= | ||||
@@ -665,7 +668,6 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB | |||||
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= | github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= | ||||
github.com/frankban/quicktest v1.8.1/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= | github.com/frankban/quicktest v1.8.1/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= | ||||
github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= | github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= | ||||
github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= | |||||
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= | github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= | ||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= | github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= | ||||
@@ -715,6 +717,8 @@ github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aA | |||||
github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= | github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= | ||||
github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= | github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= | ||||
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= | github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= | ||||
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= | |||||
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= | |||||
github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= | github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= | ||||
github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | ||||
github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= | ||||
@@ -879,6 +883,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt | |||||
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | ||||
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | ||||
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= | github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= | ||||
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= | |||||
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= | github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= | ||||
github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
@@ -896,10 +901,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD | |||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||||
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= | |||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | ||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= | |||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= | github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= | ||||
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= | github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= | ||||
@@ -936,7 +941,6 @@ github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP | |||||
github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= | github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= | ||||
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= | |||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= | github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= | ||||
github.com/google/flatbuffers v2.0.0+incompatible h1:dicJ2oXwypfwUGnB2/TYWYEKiuk9eYQlQO/AnOHl5mI= | github.com/google/flatbuffers v2.0.0+incompatible h1:dicJ2oXwypfwUGnB2/TYWYEKiuk9eYQlQO/AnOHl5mI= | ||||
@@ -980,10 +984,8 @@ github.com/google/licenseclassifier v0.0.0-20200402202327-879cb1424de0/go.mod h1 | |||||
github.com/google/licenseclassifier v0.0.0-20200708223521-3d09a0ea2f39/go.mod h1:qsqn2hxC+vURpyBRygGUuinTO42MFRLcsmQ/P8v94+M= | github.com/google/licenseclassifier v0.0.0-20200708223521-3d09a0ea2f39/go.mod h1:qsqn2hxC+vURpyBRygGUuinTO42MFRLcsmQ/P8v94+M= | ||||
github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3/go.mod h1:YzLcVlL+NqWnmUEPuhS1LxDDwGO9WNbVlEXaF4IH35g= | github.com/google/mako v0.0.0-20190821191249-122f8dcef9e3/go.mod h1:YzLcVlL+NqWnmUEPuhS1LxDDwGO9WNbVlEXaF4IH35g= | ||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | ||||
github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= | |||||
github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | ||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | ||||
github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= | |||||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | ||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||
@@ -996,6 +998,9 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf | |||||
github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | ||||
github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= | github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= | ||||
github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= | github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= | ||||
@@ -1025,8 +1030,9 @@ github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97Dwqy | |||||
github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= | github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= | ||||
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= | github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= | ||||
github.com/gophercloud/gophercloud v0.10.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= | github.com/gophercloud/gophercloud v0.10.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= | ||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= | |||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd h1:D/H64OK+VY7O0guGbCQaFKwAZlU5t764R++kgIdAGog= | |||||
github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI= | |||||
github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= | github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= | ||||
github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= | github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= | ||||
github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= | github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= | ||||
@@ -1197,7 +1203,6 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht | |||||
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= | github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= | ||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | ||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | ||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= | |||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= | github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= | ||||
github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= | github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= | ||||
github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= | github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= | ||||
@@ -1246,6 +1251,8 @@ github.com/klauspost/compress v1.10.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs | |||||
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
github.com/klauspost/compress v1.13.5 h1:9O69jUPDcsT9fEm74W92rZL9FQY7rCdaXVneq+yyzl4= | |||||
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | |||||
github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
@@ -1253,6 +1260,8 @@ github.com/klauspost/cpuid v1.2.2/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo | |||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= | github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= | ||||
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= | github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= | ||||
github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= | |||||
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | |||||
github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= | github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= | ||||
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= | github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= | ||||
github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= | github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= | ||||
@@ -1261,10 +1270,10 @@ github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f26 | |||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= | |||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= | |||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||
github.com/kr/pty v1.0.0/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | github.com/kr/pty v1.0.0/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
@@ -1292,6 +1301,7 @@ github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQ | |||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= | github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= | ||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||||
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= | |||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | ||||
@@ -1363,12 +1373,17 @@ github.com/miekg/dns v1.1.29 h1:xHBEhR+t5RzcFJjBLJlax2daXOrTYtr9z4WdKEfWFzg= | |||||
github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= | github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= | ||||
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= | github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= | ||||
github.com/mileusna/useragent v0.0.0-20190129205925-3e331f0949a5/go.mod h1:JWhYAp2EXqUtsxTKdeGlY8Wp44M7VxThC9FEoNGi2IE= | github.com/mileusna/useragent v0.0.0-20190129205925-3e331f0949a5/go.mod h1:JWhYAp2EXqUtsxTKdeGlY8Wp44M7VxThC9FEoNGi2IE= | ||||
github.com/minio/argon2 v1.0.0 h1:cLB/fl0EeBqiDYhsIzIPTdLZhCykRrvdx3Eu3E5oqsE= | |||||
github.com/minio/argon2 v1.0.0/go.mod h1:XtOGJ7MjwUJDPtCqqrisx5QwVB/jDx+adQHigJVsQHQ= | |||||
github.com/minio/madmin-go v1.3.8 h1:sL0vTRKoGi0bjAKa2f4+RsM4eFdH+uKQCe7k4E2tyjk= | |||||
github.com/minio/madmin-go v1.3.8/go.mod h1:vGKGboQgGIWx4DuDUaXixjlIEZOCIp6ivJkQoiVaACc= | |||||
github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= | github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= | ||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= | github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= | ||||
github.com/minio/minio-go/v7 v7.0.11 h1:7utSkCtMQPYYB1UB8FR3d0QSiOWE6F/JYXon29imYek= | |||||
github.com/minio/minio-go/v7 v7.0.11/go.mod h1:WoyW+ySKAKjY98B9+7ZbI8z8S3jaxaisdcvj9TGlazA= | |||||
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= | |||||
github.com/minio/minio-go/v7 v7.0.23 h1:NleyGQvAn9VQMU+YHVrgV4CX+EPtxPt/78lHOOTncy4= | |||||
github.com/minio/minio-go/v7 v7.0.23/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do= | |||||
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= | github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= | ||||
github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= | |||||
github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= | |||||
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= | github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= | ||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= | github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= | ||||
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= | github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= | ||||
@@ -1388,6 +1403,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh | |||||
github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | |||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= | github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= | ||||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | ||||
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= | github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= | ||||
@@ -1437,6 +1453,8 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS | |||||
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= | github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= | ||||
github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= | github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= | ||||
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= | github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= | ||||
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= | |||||
github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= | |||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= | ||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= | ||||
github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= | github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= | ||||
@@ -1538,17 +1556,19 @@ github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUr | |||||
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= | github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= | ||||
github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= | github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= | ||||
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= | github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= | ||||
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= | |||||
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= | github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= | ||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= | github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= | ||||
github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= | github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= | ||||
github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= | github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= | ||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= | github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= | ||||
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= | github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= | ||||
github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= | |||||
github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= | |||||
github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= | github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= | ||||
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= | github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= | ||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | ||||
github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | ||||
github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= | |||||
github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | ||||
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98= | github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98= | ||||
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= | github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= | ||||
@@ -1558,6 +1578,7 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE | |||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= | github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= | ||||
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= | |||||
github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5 h1:tFwafIEMf0B7NlcxV/zJ6leBIa81D3hgGSgsE5hCkOQ= | github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5 h1:tFwafIEMf0B7NlcxV/zJ6leBIa81D3hgGSgsE5hCkOQ= | ||||
github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= | github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= | ||||
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
@@ -1630,8 +1651,9 @@ github.com/prometheus/procfs v0.0.10/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+G | |||||
github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= | |||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | ||||
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= | |||||
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | |||||
github.com/prometheus/prometheus v0.0.0-20200609090129-a6600f564e3c/go.mod h1:S5n0C6tSgdnwWshBUceRx5G1OsjLv/EeZ9t3wIfEtsY= | github.com/prometheus/prometheus v0.0.0-20200609090129-a6600f564e3c/go.mod h1:S5n0C6tSgdnwWshBUceRx5G1OsjLv/EeZ9t3wIfEtsY= | ||||
github.com/prometheus/statsd_exporter v0.15.0/go.mod h1:Dv8HnkoLQkeEjkIE4/2ndAA7WL1zHKK7WMqFQqu72rw= | github.com/prometheus/statsd_exporter v0.15.0/go.mod h1:Dv8HnkoLQkeEjkIE4/2ndAA7WL1zHKK7WMqFQqu72rw= | ||||
github.com/prometheus/statsd_exporter v0.20.0/go.mod h1:YL3FWCG8JBBtaUSxAg4Gz2ZYu22bS84XM89ZQXXTWmQ= | github.com/prometheus/statsd_exporter v0.20.0/go.mod h1:YL3FWCG8JBBtaUSxAg4Gz2ZYu22bS84XM89ZQXXTWmQ= | ||||
@@ -1672,6 +1694,8 @@ github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrY | |||||
github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= | github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= | ||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= | github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= | ||||
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= | github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= | ||||
github.com/secure-io/sio-go v0.3.1 h1:dNvY9awjabXTYGsTF1PiCySl9Ltofk9GA3VdWlo7rRc= | |||||
github.com/secure-io/sio-go v0.3.1/go.mod h1:+xbkjDzPjwh4Axd07pRKSNriS9SCiYksWnZqdnfpQxs= | |||||
github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= | github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= | ||||
github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= | github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= | ||||
github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= | github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= | ||||
@@ -1683,18 +1707,23 @@ github.com/seldonio/seldon-core/operator v1.11.2/go.mod h1:t55mI0E9CucN2qW3NBTsL | |||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= | github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= | ||||
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= | github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= | ||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= | github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= | ||||
github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada h1:WokF3GuxBeL+n4Lk4Fa8v9mbdjlrl7bHuneF4N1bk2I= | |||||
github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= | github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= | ||||
github.com/shirou/gopsutil/v3 v3.21.6 h1:vU7jrp1Ic/2sHB7w6UNs7MIkn7ebVtTb5D9j45o9VYE= | |||||
github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+LwHTKj0ST88= | |||||
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= | github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= | ||||
github.com/shurcooL/githubv4 v0.0.0-20180925043049-51d7b505e2e9/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= | github.com/shurcooL/githubv4 v0.0.0-20180925043049-51d7b505e2e9/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= | ||||
github.com/shurcooL/githubv4 v0.0.0-20190718010115-4ba037080260/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= | github.com/shurcooL/githubv4 v0.0.0-20190718010115-4ba037080260/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= | ||||
github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= | github.com/shurcooL/githubv4 v0.0.0-20191102174205-af46314aec7b/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= | ||||
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= | github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= | ||||
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= | |||||
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= | github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= | ||||
github.com/shurcooL/graphql v0.0.0-20180924043259-e4a3a37e6d42/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= | github.com/shurcooL/graphql v0.0.0-20180924043259-e4a3a37e6d42/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= | ||||
github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= | github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= | ||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= | github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= | ||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | ||||
github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= | github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= | ||||
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= | |||||
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | ||||
github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | ||||
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= | ||||
@@ -1708,8 +1737,9 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic | |||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= | github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= | ||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= | github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= | ||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= | |||||
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= | github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= | ||||
github.com/smartystreets/assertions v1.1.1 h1:T/YLemO5Yp7KPzS+lVtu+WsHn8yoSwTfItdAd1r3cck= | |||||
github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= | |||||
github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= | github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= | ||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||
@@ -1728,6 +1758,7 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1 | |||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | ||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | ||||
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= | |||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||||
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||
@@ -1735,6 +1766,7 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 | |||||
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | ||||
github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= | github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= | ||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= | github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= | ||||
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= | |||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | ||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | ||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||
@@ -1748,6 +1780,7 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y | |||||
github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= | github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= | ||||
github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= | github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= | ||||
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= | github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= | ||||
github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= | |||||
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= | github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= | ||||
github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= | github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= | ||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= | github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= | ||||
@@ -1797,10 +1830,16 @@ github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiff | |||||
github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= | github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= | ||||
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= | github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= | ||||
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= | github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= | ||||
github.com/tinylib/msgp v1.1.3 h1:3giwAkmtaEDLSV0MdO1lDLuPgklgPzmk8H9+So2BVfA= | |||||
github.com/tinylib/msgp v1.1.3/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= | |||||
github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= | github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= | ||||
github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= | github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= | ||||
github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= | github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= | ||||
github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= | github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= | ||||
github.com/tklauser/go-sysconf v0.3.6 h1:oc1sJWvKkmvIxhDHeKWvZS4f6AW+YcoguSfRF2/Hmo4= | |||||
github.com/tklauser/go-sysconf v0.3.6/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= | |||||
github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= | |||||
github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= | |||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||||
github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= | github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= | ||||
@@ -1886,6 +1925,9 @@ go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= | |||||
go.etcd.io/etcd v0.0.0-20181031231232-83304cfc808c/go.mod h1:weASp41xM3dk0YHg1s/W8ecdGP5G4teSTMBPpYAaUgA= | go.etcd.io/etcd v0.0.0-20181031231232-83304cfc808c/go.mod h1:weASp41xM3dk0YHg1s/W8ecdGP5G4teSTMBPpYAaUgA= | ||||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= | go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= | ||||
go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= | go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= | ||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= | |||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= | |||||
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= | |||||
go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | ||||
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | ||||
go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= | ||||
@@ -1948,6 +1990,7 @@ go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= | |||||
go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= | go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= | ||||
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= | go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= | ||||
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= | go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= | ||||
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= | |||||
go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= | go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= | ||||
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= | go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= | ||||
gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= | gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= | ||||
@@ -1974,6 +2017,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U | |||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |||||
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= | golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= | ||||
@@ -1989,14 +2033,15 @@ golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPh | |||||
golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= | |||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= | golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= | ||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | ||||
golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc h1:+q90ECDSAQirdykUN6sPEiBXBsp8Csjcca8Oy7bgLTA= | |||||
golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | ||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= | |||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | |||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
@@ -2028,8 +2073,9 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl | |||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= | golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= | ||||
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | ||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | ||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= | |||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | ||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= | |||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | |||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= | golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= | ||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= | golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= | ||||
golang.org/x/mobile v0.0.0-20190806162312-597adff16ade/go.mod h1:AlhUtkH4DA4asiFC5RgK7ZKmauvtkAVcy9L0epCzlWo= | golang.org/x/mobile v0.0.0-20190806162312-597adff16ade/go.mod h1:AlhUtkH4DA4asiFC5RgK7ZKmauvtkAVcy9L0epCzlWo= | ||||
@@ -2040,6 +2086,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB | |||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||||
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= | golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= | ||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
@@ -2100,6 +2148,7 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY | |||||
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | |||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
@@ -2107,8 +2156,9 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd | |||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | ||||
golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= | golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= | ||||
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= | golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= | ||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO1APK1CoO39T4BN/XBw= | |||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= | |||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | |||||
golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
@@ -2120,6 +2170,11 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr | |||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||||
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||||
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||||
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||||
golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ= | golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ= | ||||
golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
@@ -2242,24 +2297,32 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w | |||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210216224549-f992740a1bac/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210216224549-f992740a1bac/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 h1:TyHqChC80pFkXWraUUf6RuB5IqFdQieMLwwCJokV2pc= | |||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827 h1:A0Qkn7Z/n8zC1xd9LTw17AiKlBRK64tw3ejWQiEqca0= | |||||
golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||||
golang.org/x/term v0.0.0-20201113234701-d7a72108b828/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | golang.org/x/term v0.0.0-20201113234701-d7a72108b828/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | ||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | ||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= | ||||
@@ -2401,11 +2464,15 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u | |||||
golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= | golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= | ||||
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | ||||
golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= | |||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | |||||
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= | |||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | |||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
@@ -2421,7 +2488,6 @@ gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= | |||||
gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= | gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= | ||||
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= | gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= | ||||
gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= | gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= | ||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc= | |||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= | gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= | ||||
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= | gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= | ||||
google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= | google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= | ||||
@@ -2452,8 +2518,12 @@ google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M | |||||
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= | google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= | ||||
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= | google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= | ||||
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= | google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= | ||||
google.golang.org/api v0.36.0 h1:l2Nfbl2GPXdWorv+dT2XfinX2jOOw4zv1VhLstx+6rE= | |||||
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= | google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= | ||||
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= | |||||
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= | |||||
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= | |||||
google.golang.org/api v0.44.0 h1:URs6qR1lAxDsqWITsQXI4ZkGiYJ5dHtRNiCpfs2OeKA= | |||||
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= | |||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
@@ -2527,9 +2597,17 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D | |||||
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||||
google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de h1:+nG/xknR+Gc5ByHOtK1dT0Pl3LYo8NLR+Jz3XeBeGEg= | |||||
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||||
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= | |||||
google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= | google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= | ||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= | |||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | |||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
google.golang.org/grpc v1.15.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= | google.golang.org/grpc v1.15.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= | ||||
@@ -2557,10 +2635,12 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM | |||||
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= | google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= | ||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= | google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= | ||||
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= | |||||
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | ||||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | ||||
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | ||||
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | ||||
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | |||||
google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= | google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= | ||||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= | google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= | ||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | ||||
@@ -2603,8 +2683,9 @@ gopkg.in/ini.v1 v1.46.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | |||||
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
gopkg.in/ini.v1 v1.52.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | gopkg.in/ini.v1 v1.52.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= | |||||
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= | |||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | |||||
gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= | gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= | ||||
gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= | gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= | ||||
gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= | gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= | ||||
@@ -2763,7 +2844,6 @@ pack.ag/amqp v0.8.0/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= | |||||
pack.ag/amqp v0.11.0/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= | pack.ag/amqp v0.11.0/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= | ||||
pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= | pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= | ||||
pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= | pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= | ||||
rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= | |||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | ||||
rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= | rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= | ||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= | rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= | ||||
@@ -83,6 +83,8 @@ message CreateNotebookRequest { | |||||
repeated common.api.v1.Mount mounts = 11; | repeated common.api.v1.Mount mounts = 11; | ||||
//镜像地址,非必填,镜像地址和镜像ID填一个 | //镜像地址,非必填,镜像地址和镜像ID填一个 | ||||
string imageUrl = 12; | string imageUrl = 12; | ||||
map<string, string> envs = 13; | |||||
string command = 14; | |||||
} | } | ||||
message CreateNotebookReply { | message CreateNotebookReply { | ||||
@@ -43,44 +43,46 @@ service TrainJobService { | |||||
get: "/v1/trainmanage/trainjob" | get: "/v1/trainmanage/trainjob" | ||||
}; | }; | ||||
}; | }; | ||||
// 创建训练任务模板 | |||||
rpc CreateJobTemplate (TrainJobTemplateRequest) returns (TrainJobTemplateReply) { | |||||
option (google.api.http) = { | |||||
post: "/v1/trainmanage/trainjobtemplate" | |||||
body: "*" | |||||
}; | |||||
}; | |||||
// 编辑训练任务模板 | |||||
rpc UpdateJobTemplate (TrainJobTemplate) returns (TrainJobTemplateReply) { | |||||
option (google.api.http) = { | |||||
put: "/v1/trainmanage/trainjobtemplate/{id}" | |||||
body: "*" | |||||
}; | |||||
}; | |||||
// 删除训练任务模板 | |||||
rpc DeleteTemplate (DeleteJobTemplateRequest) returns (DeleteJobTemplateReply) { | |||||
option (google.api.http) = { | |||||
delete: "/v1/trainmanage/trainjobtemplate" | |||||
}; | |||||
}; | |||||
// 获取训练任务模板详情 | |||||
rpc GetJobTemplate (GetJobTemplateRequest) returns (GetJobTemplateReply) { | |||||
option (google.api.http) = { | |||||
get: "/v1/trainmanage/trainjobtemplate/{id}" | |||||
}; | |||||
}; | |||||
// 获取训练任务列表 | |||||
rpc TrainJobTemplateList (TrainJobTemplateListRequest) returns (TrainJobTemplateListReply) { | |||||
option (google.api.http) = { | |||||
get: "/v1/trainmanage/trainjobtemplate" | |||||
}; | |||||
}; | |||||
// 复制训练任务模板 | |||||
rpc CopyJobTemplate (CopyJobTemplateRequest) returns (CopyJobTemplateReply) { | |||||
option (google.api.http) = { | |||||
post: "/v1/trainmanage/trainjobtemplate/{id}/copy" | |||||
}; | |||||
}; | |||||
// // 创建训练任务模板 | |||||
// rpc CreateJobTemplate (TrainJobTemplateRequest) returns (TrainJobTemplateReply) { | |||||
// option (google.api.http) = { | |||||
// post: "/v1/trainmanage/trainjobtemplate" | |||||
// body: "*" | |||||
// }; | |||||
// }; | |||||
// // 编辑训练任务模板 | |||||
// rpc UpdateJobTemplate (TrainJobTemplate) returns (TrainJobTemplateReply) { | |||||
// option (google.api.http) = { | |||||
// put: "/v1/trainmanage/trainjobtemplate/{id}" | |||||
// body: "*" | |||||
// }; | |||||
// }; | |||||
// // 删除训练任务模板 | |||||
// rpc DeleteTemplate (DeleteJobTemplateRequest) returns (DeleteJobTemplateReply) { | |||||
// option (google.api.http) = { | |||||
// delete: "/v1/trainmanage/trainjobtemplate" | |||||
// }; | |||||
// }; | |||||
// // 获取训练任务模板详情 | |||||
// rpc GetJobTemplate (GetJobTemplateRequest) returns (GetJobTemplateReply) { | |||||
// option (google.api.http) = { | |||||
// get: "/v1/trainmanage/trainjobtemplate/{id}" | |||||
// }; | |||||
// }; | |||||
// // 获取训练任务列表 | |||||
// rpc TrainJobTemplateList (TrainJobTemplateListRequest) returns (TrainJobTemplateListReply) { | |||||
// option (google.api.http) = { | |||||
// get: "/v1/trainmanage/trainjobtemplate" | |||||
// }; | |||||
// }; | |||||
// // 复制训练任务模板 | |||||
// rpc CopyJobTemplate (CopyJobTemplateRequest) returns (CopyJobTemplateReply) { | |||||
// option (google.api.http) = { | |||||
// post: "/v1/trainmanage/trainjobtemplate/{id}/copy" | |||||
// }; | |||||
// }; | |||||
// 获取训练任务事件列表 | // 获取训练任务事件列表 | ||||
rpc GetJobEventList (JobEventListRequest) returns (JobEventListReply) { | rpc GetJobEventList (JobEventListRequest) returns (JobEventListReply) { | ||||
option (google.api.http) = { | option (google.api.http) = { | ||||
@@ -139,6 +141,7 @@ message Config { | |||||
repeated ReplicaState replicaStates = 11; | repeated ReplicaState replicaStates = 11; | ||||
//子任务状态 | //子任务状态 | ||||
string subTaskState = 12; | string subTaskState = 12; | ||||
map<string, string> envs = 13; | |||||
} | } | ||||
message ReplicaState { | message ReplicaState { | ||||
@@ -178,7 +181,7 @@ message TrainJobTemplateRequest { | |||||
bool isDistributed = 9; | bool isDistributed = 9; | ||||
//job子任务及其配置信息,必填 | //job子任务及其配置信息,必填 | ||||
repeated Config config = 10[(validate.rules).repeated.min_items = 1]; | repeated Config config = 10[(validate.rules).repeated.min_items = 1]; | ||||
string resourcePool = 11[(validate.rules).string = {min_len: 1}]; | |||||
string resourcePool = 11[(validate.rules).string = {min_len:1}]; | |||||
} | } | ||||
message TrainJobTemplateReply { | message TrainJobTemplateReply { | ||||
@@ -334,6 +337,8 @@ message TrainJob{ | |||||
//启动时间 | //启动时间 | ||||
int64 startedAt = 22; | int64 startedAt = 22; | ||||
string imageUrl = 23; | string imageUrl = 23; | ||||
//资源池 | |||||
string resourcePool=24; | |||||
} | } | ||||
message TrainJobTemplate{ | message TrainJobTemplate{ | ||||
@@ -1,1951 +0,0 @@ | |||||
// Code generated by protoc-gen-go. DO NOT EDIT. | |||||
// versions: | |||||
// protoc-gen-go v1.26.0 | |||||
// protoc v3.15.8 | |||||
// source: server/platform-server/api/v1/trainJob.proto | |||||
package v1 | |||||
import ( | |||||
_ "github.com/envoyproxy/protoc-gen-validate/validate" | |||||
_ "google.golang.org/genproto/googleapis/api/annotations" | |||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||||
emptypb "google.golang.org/protobuf/types/known/emptypb" | |||||
reflect "reflect" | |||||
sync "sync" | |||||
) | |||||
const ( | |||||
// Verify that this generated code is sufficiently up-to-date. | |||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | |||||
// Verify that runtime/protoimpl is sufficiently up-to-date. | |||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | |||||
) | |||||
type TrainJobRequest struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//训练任务名称,必填,长度1-30 | |||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` | |||||
//训练任务描述,非必填 | |||||
Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc"` | |||||
//镜像信息 | |||||
Image *Image `protobuf:"bytes,3,opt,name=image,proto3" json:"image"` | |||||
//输出路径信息 | |||||
Output *Output `protobuf:"bytes,4,opt,name=output,proto3" json:"output"` | |||||
//数据集信息 | |||||
Datasets []*Dataset `protobuf:"bytes,5,rep,name=datasets,proto3" json:"datasets"` | |||||
//子任务信息 | |||||
Tasks []*Task `protobuf:"bytes,6,rep,name=tasks,proto3" json:"tasks"` | |||||
} | |||||
func (x *TrainJobRequest) Reset() { | |||||
*x = TrainJobRequest{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[0] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobRequest) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobRequest) ProtoMessage() {} | |||||
func (x *TrainJobRequest) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[0] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobRequest.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobRequest) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{0} | |||||
} | |||||
func (x *TrainJobRequest) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJobRequest) GetDesc() string { | |||||
if x != nil { | |||||
return x.Desc | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJobRequest) GetImage() *Image { | |||||
if x != nil { | |||||
return x.Image | |||||
} | |||||
return nil | |||||
} | |||||
func (x *TrainJobRequest) GetOutput() *Output { | |||||
if x != nil { | |||||
return x.Output | |||||
} | |||||
return nil | |||||
} | |||||
func (x *TrainJobRequest) GetDatasets() []*Dataset { | |||||
if x != nil { | |||||
return x.Datasets | |||||
} | |||||
return nil | |||||
} | |||||
func (x *TrainJobRequest) GetTasks() []*Task { | |||||
if x != nil { | |||||
return x.Tasks | |||||
} | |||||
return nil | |||||
} | |||||
type Image struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` | |||||
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version"` | |||||
} | |||||
func (x *Image) Reset() { | |||||
*x = Image{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[1] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Image) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Image) ProtoMessage() {} | |||||
func (x *Image) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[1] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Image.ProtoReflect.Descriptor instead. | |||||
func (*Image) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{1} | |||||
} | |||||
func (x *Image) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Image) GetVersion() string { | |||||
if x != nil { | |||||
return x.Version | |||||
} | |||||
return "" | |||||
} | |||||
type Dataset struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//存储配置名称,必填 | |||||
StorageConfigName string `protobuf:"bytes,1,opt,name=storageConfigName,proto3" json:"storageConfigName"` | |||||
//数据集子目录 | |||||
Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr"` | |||||
//数据集名称,必填 | |||||
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name"` | |||||
//数据集容器内路径 | |||||
Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path"` | |||||
} | |||||
func (x *Dataset) Reset() { | |||||
*x = Dataset{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[2] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Dataset) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Dataset) ProtoMessage() {} | |||||
func (x *Dataset) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[2] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Dataset.ProtoReflect.Descriptor instead. | |||||
func (*Dataset) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{2} | |||||
} | |||||
func (x *Dataset) GetStorageConfigName() string { | |||||
if x != nil { | |||||
return x.StorageConfigName | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Dataset) GetAddr() string { | |||||
if x != nil { | |||||
return x.Addr | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Dataset) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Dataset) GetPath() string { | |||||
if x != nil { | |||||
return x.Path | |||||
} | |||||
return "" | |||||
} | |||||
type Output struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//存储配置名称,必填 | |||||
StorageConfigName string `protobuf:"bytes,1,opt,name=storageConfigName,proto3" json:"storageConfigName"` | |||||
//存储子目录 | |||||
Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr"` | |||||
//容器内输出路径 | |||||
Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path"` | |||||
} | |||||
func (x *Output) Reset() { | |||||
*x = Output{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[3] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Output) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Output) ProtoMessage() {} | |||||
func (x *Output) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[3] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Output.ProtoReflect.Descriptor instead. | |||||
func (*Output) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{3} | |||||
} | |||||
func (x *Output) GetStorageConfigName() string { | |||||
if x != nil { | |||||
return x.StorageConfigName | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Output) GetAddr() string { | |||||
if x != nil { | |||||
return x.Addr | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Output) GetPath() string { | |||||
if x != nil { | |||||
return x.Path | |||||
} | |||||
return "" | |||||
} | |||||
type Task struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//子任务名称,非必填,校验规则"^[0-9a-zA-Z_]*$",最大长度30个字符 | |||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` | |||||
//子任务执行命令 | |||||
Command string `protobuf:"bytes,2,opt,name=command,proto3" json:"command"` | |||||
//command执行命令参数,key-value,数组 | |||||
Parameters []*Parameter `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters"` | |||||
//资源 | |||||
Resources []*Resource `protobuf:"bytes,4,rep,name=resources,proto3" json:"resources"` | |||||
//副本个数,非必填 | |||||
TaskNumber int64 `protobuf:"varint,5,opt,name=taskNumber,proto3" json:"taskNumber"` | |||||
//子任务最小失败数,非必填 | |||||
MinFailedTaskCount int64 `protobuf:"varint,6,opt,name=minFailedTaskCount,proto3" json:"minFailedTaskCount"` | |||||
//子任务最小成功数,非必填 | |||||
MinSucceededTaskCount int64 `protobuf:"varint,7,opt,name=minSucceededTaskCount,proto3" json:"minSucceededTaskCount"` | |||||
//是否主任务,非必填 | |||||
IsMainRole bool `protobuf:"varint,8,opt,name=isMainRole,proto3" json:"isMainRole"` | |||||
} | |||||
func (x *Task) Reset() { | |||||
*x = Task{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[4] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Task) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Task) ProtoMessage() {} | |||||
func (x *Task) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[4] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Task.ProtoReflect.Descriptor instead. | |||||
func (*Task) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{4} | |||||
} | |||||
func (x *Task) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Task) GetCommand() string { | |||||
if x != nil { | |||||
return x.Command | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Task) GetParameters() []*Parameter { | |||||
if x != nil { | |||||
return x.Parameters | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Task) GetResources() []*Resource { | |||||
if x != nil { | |||||
return x.Resources | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Task) GetTaskNumber() int64 { | |||||
if x != nil { | |||||
return x.TaskNumber | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *Task) GetMinFailedTaskCount() int64 { | |||||
if x != nil { | |||||
return x.MinFailedTaskCount | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *Task) GetMinSucceededTaskCount() int64 { | |||||
if x != nil { | |||||
return x.MinSucceededTaskCount | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *Task) GetIsMainRole() bool { | |||||
if x != nil { | |||||
return x.IsMainRole | |||||
} | |||||
return false | |||||
} | |||||
type Parameter struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//命令参数key,非必填 | |||||
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key"` | |||||
//命令参数value,非必填 | |||||
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value"` | |||||
} | |||||
func (x *Parameter) Reset() { | |||||
*x = Parameter{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[5] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Parameter) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Parameter) ProtoMessage() {} | |||||
func (x *Parameter) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[5] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Parameter.ProtoReflect.Descriptor instead. | |||||
func (*Parameter) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{5} | |||||
} | |||||
func (x *Parameter) GetKey() string { | |||||
if x != nil { | |||||
return x.Key | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Parameter) GetValue() string { | |||||
if x != nil { | |||||
return x.Value | |||||
} | |||||
return "" | |||||
} | |||||
type Resource struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//命令参数key,必填 | |||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` | |||||
//命令参数value,必填 | |||||
Size string `protobuf:"bytes,2,opt,name=size,proto3" json:"size"` | |||||
} | |||||
func (x *Resource) Reset() { | |||||
*x = Resource{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[6] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Resource) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Resource) ProtoMessage() {} | |||||
func (x *Resource) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[6] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Resource.ProtoReflect.Descriptor instead. | |||||
func (*Resource) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{6} | |||||
} | |||||
func (x *Resource) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Resource) GetSize() string { | |||||
if x != nil { | |||||
return x.Size | |||||
} | |||||
return "" | |||||
} | |||||
type TrainJobReply struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//训练任务ID,必填 | |||||
JobId string `protobuf:"bytes,1,opt,name=jobId,proto3" json:"jobId"` | |||||
} | |||||
func (x *TrainJobReply) Reset() { | |||||
*x = TrainJobReply{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[7] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobReply) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobReply) ProtoMessage() {} | |||||
func (x *TrainJobReply) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[7] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobReply.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobReply) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{7} | |||||
} | |||||
func (x *TrainJobReply) GetJobId() string { | |||||
if x != nil { | |||||
return x.JobId | |||||
} | |||||
return "" | |||||
} | |||||
type StopJobRequest struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//任务ID | |||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` | |||||
} | |||||
func (x *StopJobRequest) Reset() { | |||||
*x = StopJobRequest{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[8] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *StopJobRequest) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*StopJobRequest) ProtoMessage() {} | |||||
func (x *StopJobRequest) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[8] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use StopJobRequest.ProtoReflect.Descriptor instead. | |||||
func (*StopJobRequest) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{8} | |||||
} | |||||
func (x *StopJobRequest) GetId() string { | |||||
if x != nil { | |||||
return x.Id | |||||
} | |||||
return "" | |||||
} | |||||
type StopJobReply struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//停止时间 | |||||
StoppedAt int64 `protobuf:"varint,1,opt,name=stoppedAt,proto3" json:"stoppedAt"` | |||||
} | |||||
func (x *StopJobReply) Reset() { | |||||
*x = StopJobReply{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[9] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *StopJobReply) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*StopJobReply) ProtoMessage() {} | |||||
func (x *StopJobReply) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[9] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use StopJobReply.ProtoReflect.Descriptor instead. | |||||
func (*StopJobReply) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{9} | |||||
} | |||||
func (x *StopJobReply) GetStoppedAt() int64 { | |||||
if x != nil { | |||||
return x.StoppedAt | |||||
} | |||||
return 0 | |||||
} | |||||
type TrainJobListRequest struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
// 页码,从1开始,必填 | |||||
PageIndex int64 `protobuf:"varint,1,opt,name=pageIndex,proto3" json:"pageIndex"` | |||||
// 页大小,最小1条,最大100条,必填 | |||||
PageSize int64 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize"` | |||||
// 分组依据,非必填 | |||||
SortBy string `protobuf:"bytes,3,opt,name=sortBy,proto3" json:"sortBy"` | |||||
//升序、降序,非必填 | |||||
OrderBy string `protobuf:"bytes,4,opt,name=orderBy,proto3" json:"orderBy"` | |||||
//大于某个时间创建,非必填 | |||||
CreatedAtGte int64 `protobuf:"varint,5,opt,name=createdAtGte,proto3" json:"createdAtGte"` | |||||
//小于某个时间创建,非必填 | |||||
CreatedAtLt int64 `protobuf:"varint,6,opt,name=createdAtLt,proto3" json:"createdAtLt"` | |||||
//状态查询,非必填 | |||||
Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status"` | |||||
//模糊查找字段,可用于name等模糊查找,非必填 | |||||
SearchKey string `protobuf:"bytes,8,opt,name=searchKey,proto3" json:"searchKey"` | |||||
} | |||||
func (x *TrainJobListRequest) Reset() { | |||||
*x = TrainJobListRequest{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[10] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobListRequest) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobListRequest) ProtoMessage() {} | |||||
func (x *TrainJobListRequest) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[10] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobListRequest.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobListRequest) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{10} | |||||
} | |||||
func (x *TrainJobListRequest) GetPageIndex() int64 { | |||||
if x != nil { | |||||
return x.PageIndex | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobListRequest) GetPageSize() int64 { | |||||
if x != nil { | |||||
return x.PageSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobListRequest) GetSortBy() string { | |||||
if x != nil { | |||||
return x.SortBy | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJobListRequest) GetOrderBy() string { | |||||
if x != nil { | |||||
return x.OrderBy | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJobListRequest) GetCreatedAtGte() int64 { | |||||
if x != nil { | |||||
return x.CreatedAtGte | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobListRequest) GetCreatedAtLt() int64 { | |||||
if x != nil { | |||||
return x.CreatedAtLt | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobListRequest) GetStatus() string { | |||||
if x != nil { | |||||
return x.Status | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJobListRequest) GetSearchKey() string { | |||||
if x != nil { | |||||
return x.SearchKey | |||||
} | |||||
return "" | |||||
} | |||||
type TrainJobListReply struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//查询结果总数 | |||||
TotalSize int64 `protobuf:"varint,1,opt,name=totalSize,proto3" json:"totalSize"` | |||||
//任务 | |||||
TrainJobs []*TrainJob `protobuf:"bytes,2,rep,name=trainJobs,proto3" json:"trainJobs"` | |||||
} | |||||
func (x *TrainJobListReply) Reset() { | |||||
*x = TrainJobListReply{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[11] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobListReply) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobListReply) ProtoMessage() {} | |||||
func (x *TrainJobListReply) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[11] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobListReply.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobListReply) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{11} | |||||
} | |||||
func (x *TrainJobListReply) GetTotalSize() int64 { | |||||
if x != nil { | |||||
return x.TotalSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobListReply) GetTrainJobs() []*TrainJob { | |||||
if x != nil { | |||||
return x.TrainJobs | |||||
} | |||||
return nil | |||||
} | |||||
type TrainJob struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//任务ID | |||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` | |||||
//job名称 | |||||
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name"` | |||||
//job描述 | |||||
Desc string `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc"` | |||||
//数据集 | |||||
Datasets []*Dataset `protobuf:"bytes,4,rep,name=datasets,proto3" json:"datasets"` | |||||
//镜像 | |||||
Image *Image `protobuf:"bytes,5,opt,name=image,proto3" json:"image"` | |||||
//子任务配置信息 | |||||
Tasks []*Task `protobuf:"bytes,6,rep,name=tasks,proto3" json:"tasks"` | |||||
//创建时间 | |||||
CreatedAt int64 `protobuf:"varint,7,opt,name=createdAt,proto3" json:"createdAt"` | |||||
//更新时间 | |||||
UpdatedAt int64 `protobuf:"varint,8,opt,name=updatedAt,proto3" json:"updatedAt"` | |||||
//任务状态 | |||||
Status string `protobuf:"bytes,9,opt,name=status,proto3" json:"status"` | |||||
//job完成时间 | |||||
CompletedAt int64 `protobuf:"varint,10,opt,name=completedAt,proto3" json:"completedAt"` | |||||
//运行时 | |||||
RunSec int64 `protobuf:"varint,11,opt,name=runSec,proto3" json:"runSec"` | |||||
//启动时间 | |||||
StartedAt int64 `protobuf:"varint,12,opt,name=startedAt,proto3" json:"startedAt"` | |||||
} | |||||
func (x *TrainJob) Reset() { | |||||
*x = TrainJob{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[12] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJob) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJob) ProtoMessage() {} | |||||
func (x *TrainJob) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[12] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJob.ProtoReflect.Descriptor instead. | |||||
func (*TrainJob) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{12} | |||||
} | |||||
func (x *TrainJob) GetId() string { | |||||
if x != nil { | |||||
return x.Id | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJob) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJob) GetDesc() string { | |||||
if x != nil { | |||||
return x.Desc | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJob) GetDatasets() []*Dataset { | |||||
if x != nil { | |||||
return x.Datasets | |||||
} | |||||
return nil | |||||
} | |||||
func (x *TrainJob) GetImage() *Image { | |||||
if x != nil { | |||||
return x.Image | |||||
} | |||||
return nil | |||||
} | |||||
func (x *TrainJob) GetTasks() []*Task { | |||||
if x != nil { | |||||
return x.Tasks | |||||
} | |||||
return nil | |||||
} | |||||
func (x *TrainJob) GetCreatedAt() int64 { | |||||
if x != nil { | |||||
return x.CreatedAt | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJob) GetUpdatedAt() int64 { | |||||
if x != nil { | |||||
return x.UpdatedAt | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJob) GetStatus() string { | |||||
if x != nil { | |||||
return x.Status | |||||
} | |||||
return "" | |||||
} | |||||
func (x *TrainJob) GetCompletedAt() int64 { | |||||
if x != nil { | |||||
return x.CompletedAt | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJob) GetRunSec() int64 { | |||||
if x != nil { | |||||
return x.RunSec | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJob) GetStartedAt() int64 { | |||||
if x != nil { | |||||
return x.StartedAt | |||||
} | |||||
return 0 | |||||
} | |||||
type TrainJobInfoRequest struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//任务ID | |||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id"` | |||||
} | |||||
func (x *TrainJobInfoRequest) Reset() { | |||||
*x = TrainJobInfoRequest{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[13] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobInfoRequest) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobInfoRequest) ProtoMessage() {} | |||||
func (x *TrainJobInfoRequest) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[13] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobInfoRequest.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobInfoRequest) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{13} | |||||
} | |||||
func (x *TrainJobInfoRequest) GetId() string { | |||||
if x != nil { | |||||
return x.Id | |||||
} | |||||
return "" | |||||
} | |||||
type TrainJobInfoReply struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//训练任务 | |||||
TrainJob *TrainJob `protobuf:"bytes,1,opt,name=trainJob,proto3" json:"trainJob"` | |||||
} | |||||
func (x *TrainJobInfoReply) Reset() { | |||||
*x = TrainJobInfoReply{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[14] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobInfoReply) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobInfoReply) ProtoMessage() {} | |||||
func (x *TrainJobInfoReply) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[14] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobInfoReply.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobInfoReply) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{14} | |||||
} | |||||
func (x *TrainJobInfoReply) GetTrainJob() *TrainJob { | |||||
if x != nil { | |||||
return x.TrainJob | |||||
} | |||||
return nil | |||||
} | |||||
type TrainJobStasticsRequest struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//大于某个时间创建,非必填 | |||||
CreatedAtGte int64 `protobuf:"varint,1,opt,name=createdAtGte,proto3" json:"createdAtGte"` | |||||
//小于某个时间创建,非必填 | |||||
CreatedAtLt int64 `protobuf:"varint,2,opt,name=createdAtLt,proto3" json:"createdAtLt"` | |||||
} | |||||
func (x *TrainJobStasticsRequest) Reset() { | |||||
*x = TrainJobStasticsRequest{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[15] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobStasticsRequest) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobStasticsRequest) ProtoMessage() {} | |||||
func (x *TrainJobStasticsRequest) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[15] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobStasticsRequest.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobStasticsRequest) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{15} | |||||
} | |||||
func (x *TrainJobStasticsRequest) GetCreatedAtGte() int64 { | |||||
if x != nil { | |||||
return x.CreatedAtGte | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobStasticsRequest) GetCreatedAtLt() int64 { | |||||
if x != nil { | |||||
return x.CreatedAtLt | |||||
} | |||||
return 0 | |||||
} | |||||
type TrainJobStasticsReply struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
//任务数量 | |||||
TotalSize int64 `protobuf:"varint,1,opt,name=totalSize,proto3" json:"totalSize"` | |||||
//成功数量 | |||||
SucceededSize int64 `protobuf:"varint,2,opt,name=succeededSize,proto3" json:"succeededSize"` | |||||
//失败数量 | |||||
FailedSize int64 `protobuf:"varint,3,opt,name=failedSize,proto3" json:"failedSize"` | |||||
//停止数量 | |||||
StoppedSize int64 `protobuf:"varint,4,opt,name=stoppedSize,proto3" json:"stoppedSize"` | |||||
//正在运行数量 | |||||
RunningSize int64 `protobuf:"varint,5,opt,name=runningSize,proto3" json:"runningSize"` | |||||
//等待数量 | |||||
WaitingSize int64 `protobuf:"varint,6,opt,name=waitingSize,proto3" json:"waitingSize"` | |||||
} | |||||
func (x *TrainJobStasticsReply) Reset() { | |||||
*x = TrainJobStasticsReply{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[16] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *TrainJobStasticsReply) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*TrainJobStasticsReply) ProtoMessage() {} | |||||
func (x *TrainJobStasticsReply) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[16] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use TrainJobStasticsReply.ProtoReflect.Descriptor instead. | |||||
func (*TrainJobStasticsReply) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{16} | |||||
} | |||||
func (x *TrainJobStasticsReply) GetTotalSize() int64 { | |||||
if x != nil { | |||||
return x.TotalSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobStasticsReply) GetSucceededSize() int64 { | |||||
if x != nil { | |||||
return x.SucceededSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobStasticsReply) GetFailedSize() int64 { | |||||
if x != nil { | |||||
return x.FailedSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobStasticsReply) GetStoppedSize() int64 { | |||||
if x != nil { | |||||
return x.StoppedSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobStasticsReply) GetRunningSize() int64 { | |||||
if x != nil { | |||||
return x.RunningSize | |||||
} | |||||
return 0 | |||||
} | |||||
func (x *TrainJobStasticsReply) GetWaitingSize() int64 { | |||||
if x != nil { | |||||
return x.WaitingSize | |||||
} | |||||
return 0 | |||||
} | |||||
type Node struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
NodeName string `protobuf:"bytes,1,opt,name=nodeName,proto3" json:"nodeName"` | |||||
Ip string `protobuf:"bytes,2,opt,name=ip,proto3" json:"ip"` | |||||
Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status"` | |||||
Capacity map[string]string `protobuf:"bytes,4,rep,name=capacity,proto3" json:"capacity" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | |||||
Allocated map[string]string `protobuf:"bytes,5,rep,name=allocated,proto3" json:"allocated" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` | |||||
} | |||||
func (x *Node) Reset() { | |||||
*x = Node{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[17] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Node) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Node) ProtoMessage() {} | |||||
func (x *Node) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[17] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Node.ProtoReflect.Descriptor instead. | |||||
func (*Node) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{17} | |||||
} | |||||
func (x *Node) GetNodeName() string { | |||||
if x != nil { | |||||
return x.NodeName | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Node) GetIp() string { | |||||
if x != nil { | |||||
return x.Ip | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Node) GetStatus() string { | |||||
if x != nil { | |||||
return x.Status | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Node) GetCapacity() map[string]string { | |||||
if x != nil { | |||||
return x.Capacity | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Node) GetAllocated() map[string]string { | |||||
if x != nil { | |||||
return x.Allocated | |||||
} | |||||
return nil | |||||
} | |||||
type PlatformResourcesReply struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
Resources []*Node `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources"` | |||||
} | |||||
func (x *PlatformResourcesReply) Reset() { | |||||
*x = PlatformResourcesReply{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[18] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *PlatformResourcesReply) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*PlatformResourcesReply) ProtoMessage() {} | |||||
func (x *PlatformResourcesReply) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_api_v1_trainJob_proto_msgTypes[18] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use PlatformResourcesReply.ProtoReflect.Descriptor instead. | |||||
func (*PlatformResourcesReply) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP(), []int{18} | |||||
} | |||||
func (x *PlatformResourcesReply) GetResources() []*Node { | |||||
if x != nil { | |||||
return x.Resources | |||||
} | |||||
return nil | |||||
} | |||||
var File_server_platform_server_api_v1_trainJob_proto protoreflect.FileDescriptor | |||||
var file_server_platform_server_api_v1_trainJob_proto_rawDesc = []byte{ | |||||
0x0a, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, | |||||
0x6d, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, | |||||
0x74, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, | |||||
0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, | |||||
0x70, 0x69, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, | |||||
0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, | |||||
0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, | |||||
0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, | |||||
0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, | |||||
0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa8, 0x02, 0x0a, 0x0f, 0x54, 0x72, | |||||
0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, | |||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, | |||||
0x72, 0x04, 0x10, 0x01, 0x18, 0x1e, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x04, | |||||
0x64, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, | |||||
0x03, 0x18, 0xac, 0x02, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, | |||||
0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6c, 0x61, 0x74, | |||||
0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, | |||||
0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x35, | |||||
0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, | |||||
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, | |||||
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, | |||||
0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, | |||||
0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, | |||||
0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, | |||||
0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, | |||||
0x73, 0x12, 0x31, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, | |||||
0x32, 0x1b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, | |||||
0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x05, 0x74, | |||||
0x61, 0x73, 0x6b, 0x73, 0x22, 0x4c, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, | |||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, | |||||
0x72, 0x05, 0x10, 0x01, 0x18, 0xac, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, | |||||
0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, | |||||
0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x1e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, | |||||
0x6f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x35, | |||||
0x0a, 0x11, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4e, | |||||
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, | |||||
0x18, 0x1e, 0x52, 0x11, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, | |||||
0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, | |||||
0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xac, 0x02, 0x52, 0x04, 0x61, | |||||
0x64, 0x64, 0x72, 0x12, 0x1c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, | |||||
0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xac, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, | |||||
0x65, 0x12, 0x1c, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, | |||||
0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xac, 0x02, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, | |||||
0x7b, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x35, 0x0a, 0x11, 0x73, 0x74, 0x6f, | |||||
0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, | |||||
0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x1e, 0x52, 0x11, 0x73, | |||||
0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4e, 0x61, 0x6d, 0x65, | |||||
0x12, 0x1c, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, | |||||
0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xac, 0x02, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1c, | |||||
0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, | |||||
0x05, 0x72, 0x03, 0x18, 0xac, 0x02, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x8d, 0x03, 0x0a, | |||||
0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, | |||||
0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x1e, 0x52, 0x04, | |||||
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, | |||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x00, 0x18, 0xac, | |||||
0x02, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x61, | |||||
0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, | |||||
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, | |||||
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, | |||||
0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x09, | |||||
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, | |||||
0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, | |||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, | |||||
0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0a, 0x74, | |||||
0x61, 0x73, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x42, | |||||
0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x4e, 0x75, | |||||
0x6d, 0x62, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x12, 0x6d, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, | |||||
0x64, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, | |||||
0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x12, 0x6d, 0x69, 0x6e, 0x46, 0x61, | |||||
0x69, 0x6c, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, | |||||
0x15, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x54, 0x61, 0x73, | |||||
0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, | |||||
0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x15, 0x6d, 0x69, 0x6e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, | |||||
0x64, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, | |||||
0x69, 0x73, 0x4d, 0x61, 0x69, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, | |||||
0x52, 0x0a, 0x69, 0x73, 0x4d, 0x61, 0x69, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x33, 0x0a, 0x09, | |||||
0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, | |||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, | |||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, | |||||
0x65, 0x22, 0x32, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, | |||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, | |||||
0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, | |||||
0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, | |||||
0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, | |||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x22, 0x29, 0x0a, 0x0e, | |||||
0x53, 0x74, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, | |||||
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, | |||||
0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2c, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x4a, | |||||
0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x70, | |||||
0x65, 0x64, 0x41, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x70, | |||||
0x70, 0x65, 0x64, 0x41, 0x74, 0x22, 0xa5, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, | |||||
0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, | |||||
0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, | |||||
0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, | |||||
0x6e, 0x64, 0x65, 0x78, 0x12, 0x25, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, | |||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x22, 0x04, 0x10, 0x64, 0x28, | |||||
0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, | |||||
0x6f, 0x72, 0x74, 0x42, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, | |||||
0x74, 0x42, 0x79, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x18, 0x04, | |||||
0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xfa, 0x42, 0x0f, 0x72, 0x0d, 0x52, 0x00, 0x52, 0x03, 0x61, | |||||
0x73, 0x63, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, | |||||
0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x47, 0x74, | |||||
0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, | |||||
0x41, 0x74, 0x47, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, | |||||
0x41, 0x74, 0x4c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, | |||||
0x74, 0x65, 0x64, 0x41, 0x74, 0x4c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, | |||||
0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, | |||||
0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, | |||||
0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x22, 0x70, 0x0a, | |||||
0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, | |||||
0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, | |||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, | |||||
0x12, 0x3d, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, | |||||
0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, | |||||
0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, | |||||
0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x73, 0x22, | |||||
0x91, 0x03, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, | |||||
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, | |||||
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, | |||||
0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, | |||||
0x64, 0x65, 0x73, 0x63, 0x12, 0x3a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, | |||||
0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, | |||||
0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, | |||||
0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, | |||||
0x12, 0x32, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, | |||||
0x1c, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, | |||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, | |||||
0x6d, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x06, 0x20, | |||||
0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, | |||||
0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, | |||||
0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, | |||||
0x65, 0x64, 0x41, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, | |||||
0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, | |||||
0x41, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, | |||||
0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, | |||||
0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, | |||||
0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, | |||||
0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, | |||||
0x06, 0x72, 0x75, 0x6e, 0x53, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, | |||||
0x75, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, | |||||
0x41, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, | |||||
0x64, 0x41, 0x74, 0x22, 0x2e, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x49, | |||||
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, | |||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, | |||||
0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x49, | |||||
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3b, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x69, | |||||
0x6e, 0x4a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6c, 0x61, | |||||
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, | |||||
0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x08, 0x74, 0x72, 0x61, | |||||
0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x22, 0x5f, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, | |||||
0x62, 0x53, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | |||||
0x12, 0x22, 0x0a, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x47, 0x74, 0x65, | |||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, | |||||
0x74, 0x47, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, | |||||
0x74, 0x4c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, | |||||
0x65, 0x64, 0x41, 0x74, 0x4c, 0x74, 0x22, 0xe1, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x69, 0x6e, | |||||
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, | |||||
0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, | |||||
0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, | |||||
0x0a, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, | |||||
0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, | |||||
0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x69, | |||||
0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, | |||||
0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x53, | |||||
0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x70, | |||||
0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, | |||||
0x67, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6e, | |||||
0x6e, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x77, 0x61, 0x69, 0x74, | |||||
0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x77, | |||||
0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xd6, 0x02, 0x0a, 0x04, 0x4e, | |||||
0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, | |||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, | |||||
0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, | |||||
0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, | |||||
0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, | |||||
0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x6c, 0x61, 0x74, | |||||
0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, | |||||
0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x45, | |||||
0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x48, | |||||
0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, | |||||
0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, | |||||
0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x41, | |||||
0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, | |||||
0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x3b, 0x0a, 0x0d, 0x43, 0x61, 0x70, 0x61, | |||||
0x63, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, | |||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, | |||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, | |||||
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, | |||||
0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, | |||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, | |||||
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, | |||||
0x02, 0x38, 0x01, 0x22, 0x53, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, | |||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x39, 0x0a, | |||||
0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, | |||||
0x32, 0x1b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, | |||||
0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x72, | |||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x32, 0xb4, 0x06, 0x0a, 0x0f, 0x54, 0x72, 0x61, | |||||
0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7a, 0x0a, 0x08, | |||||
0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x26, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, | |||||
0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, | |||||
0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | |||||
0x1a, 0x24, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, | |||||
0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, | |||||
0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, | |||||
0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x72, 0x61, | |||||
0x69, 0x6e, 0x6a, 0x6f, 0x62, 0x3a, 0x01, 0x2a, 0x12, 0x81, 0x01, 0x0a, 0x07, 0x53, 0x74, 0x6f, | |||||
0x70, 0x4a, 0x6f, 0x62, 0x12, 0x25, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, | |||||
0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, | |||||
0x70, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x6c, | |||||
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, | |||||
0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, | |||||
0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, | |||||
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6a, 0x6f, 0x62, 0x2f, | |||||
0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, | |||||
0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x2e, 0x70, 0x6c, | |||||
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, | |||||
0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, | |||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, | |||||
0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, | |||||
0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, | |||||
0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x70, | |||||
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6a, 0x6f, 0x62, | |||||
0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, | |||||
0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, | |||||
0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, | |||||
0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, | |||||
0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, | |||||
0x76, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, | |||||
0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, 0xd3, | |||||
0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, | |||||
0x72, 0x6d, 0x2f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6a, 0x6f, 0x62, 0x12, 0x96, 0x01, 0x0a, 0x10, | |||||
0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, | |||||
0x12, 0x2e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, | |||||
0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, | |||||
0x62, 0x53, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | |||||
0x1a, 0x2c, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, | |||||
0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4a, 0x6f, | |||||
0x62, 0x53, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x24, | |||||
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x76, 0x65, 0x72, | |||||
0x61, 0x6c, 0x6c, 0x2f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x73, | |||||
0x74, 0x69, 0x63, 0x73, 0x12, 0x79, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, | |||||
0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, | |||||
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, | |||||
0x79, 0x1a, 0x2d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, | |||||
0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, | |||||
0x72, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, | |||||
0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, | |||||
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, | |||||
0x22, 0x5a, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, | |||||
0x72, 0x6d, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, | |||||
0x3b, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |||||
} | |||||
var ( | |||||
file_server_platform_server_api_v1_trainJob_proto_rawDescOnce sync.Once | |||||
file_server_platform_server_api_v1_trainJob_proto_rawDescData = file_server_platform_server_api_v1_trainJob_proto_rawDesc | |||||
) | |||||
func file_server_platform_server_api_v1_trainJob_proto_rawDescGZIP() []byte { | |||||
file_server_platform_server_api_v1_trainJob_proto_rawDescOnce.Do(func() { | |||||
file_server_platform_server_api_v1_trainJob_proto_rawDescData = protoimpl.X.CompressGZIP(file_server_platform_server_api_v1_trainJob_proto_rawDescData) | |||||
}) | |||||
return file_server_platform_server_api_v1_trainJob_proto_rawDescData | |||||
} | |||||
var file_server_platform_server_api_v1_trainJob_proto_msgTypes = make([]protoimpl.MessageInfo, 21) | |||||
var file_server_platform_server_api_v1_trainJob_proto_goTypes = []interface{}{ | |||||
(*TrainJobRequest)(nil), // 0: platformserver.api.v1.TrainJobRequest | |||||
(*Image)(nil), // 1: platformserver.api.v1.Image | |||||
(*Dataset)(nil), // 2: platformserver.api.v1.Dataset | |||||
(*Output)(nil), // 3: platformserver.api.v1.Output | |||||
(*Task)(nil), // 4: platformserver.api.v1.Task | |||||
(*Parameter)(nil), // 5: platformserver.api.v1.Parameter | |||||
(*Resource)(nil), // 6: platformserver.api.v1.Resource | |||||
(*TrainJobReply)(nil), // 7: platformserver.api.v1.TrainJobReply | |||||
(*StopJobRequest)(nil), // 8: platformserver.api.v1.StopJobRequest | |||||
(*StopJobReply)(nil), // 9: platformserver.api.v1.StopJobReply | |||||
(*TrainJobListRequest)(nil), // 10: platformserver.api.v1.TrainJobListRequest | |||||
(*TrainJobListReply)(nil), // 11: platformserver.api.v1.TrainJobListReply | |||||
(*TrainJob)(nil), // 12: platformserver.api.v1.TrainJob | |||||
(*TrainJobInfoRequest)(nil), // 13: platformserver.api.v1.TrainJobInfoRequest | |||||
(*TrainJobInfoReply)(nil), // 14: platformserver.api.v1.TrainJobInfoReply | |||||
(*TrainJobStasticsRequest)(nil), // 15: platformserver.api.v1.TrainJobStasticsRequest | |||||
(*TrainJobStasticsReply)(nil), // 16: platformserver.api.v1.TrainJobStasticsReply | |||||
(*Node)(nil), // 17: platformserver.api.v1.Node | |||||
(*PlatformResourcesReply)(nil), // 18: platformserver.api.v1.PlatformResourcesReply | |||||
nil, // 19: platformserver.api.v1.Node.CapacityEntry | |||||
nil, // 20: platformserver.api.v1.Node.AllocatedEntry | |||||
(*emptypb.Empty)(nil), // 21: google.protobuf.Empty | |||||
} | |||||
var file_server_platform_server_api_v1_trainJob_proto_depIdxs = []int32{ | |||||
1, // 0: platformserver.api.v1.TrainJobRequest.image:type_name -> platformserver.api.v1.Image | |||||
3, // 1: platformserver.api.v1.TrainJobRequest.output:type_name -> platformserver.api.v1.Output | |||||
2, // 2: platformserver.api.v1.TrainJobRequest.datasets:type_name -> platformserver.api.v1.Dataset | |||||
4, // 3: platformserver.api.v1.TrainJobRequest.tasks:type_name -> platformserver.api.v1.Task | |||||
5, // 4: platformserver.api.v1.Task.parameters:type_name -> platformserver.api.v1.Parameter | |||||
6, // 5: platformserver.api.v1.Task.resources:type_name -> platformserver.api.v1.Resource | |||||
12, // 6: platformserver.api.v1.TrainJobListReply.trainJobs:type_name -> platformserver.api.v1.TrainJob | |||||
2, // 7: platformserver.api.v1.TrainJob.datasets:type_name -> platformserver.api.v1.Dataset | |||||
1, // 8: platformserver.api.v1.TrainJob.image:type_name -> platformserver.api.v1.Image | |||||
4, // 9: platformserver.api.v1.TrainJob.tasks:type_name -> platformserver.api.v1.Task | |||||
12, // 10: platformserver.api.v1.TrainJobInfoReply.trainJob:type_name -> platformserver.api.v1.TrainJob | |||||
19, // 11: platformserver.api.v1.Node.capacity:type_name -> platformserver.api.v1.Node.CapacityEntry | |||||
20, // 12: platformserver.api.v1.Node.allocated:type_name -> platformserver.api.v1.Node.AllocatedEntry | |||||
17, // 13: platformserver.api.v1.PlatformResourcesReply.resources:type_name -> platformserver.api.v1.Node | |||||
0, // 14: platformserver.api.v1.TrainJobService.TrainJob:input_type -> platformserver.api.v1.TrainJobRequest | |||||
8, // 15: platformserver.api.v1.TrainJobService.StopJob:input_type -> platformserver.api.v1.StopJobRequest | |||||
13, // 16: platformserver.api.v1.TrainJobService.GetJobInfo:input_type -> platformserver.api.v1.TrainJobInfoRequest | |||||
10, // 17: platformserver.api.v1.TrainJobService.TrainJobList:input_type -> platformserver.api.v1.TrainJobListRequest | |||||
15, // 18: platformserver.api.v1.TrainJobService.TrainJobStastics:input_type -> platformserver.api.v1.TrainJobStasticsRequest | |||||
21, // 19: platformserver.api.v1.TrainJobService.PlatformResources:input_type -> google.protobuf.Empty | |||||
7, // 20: platformserver.api.v1.TrainJobService.TrainJob:output_type -> platformserver.api.v1.TrainJobReply | |||||
9, // 21: platformserver.api.v1.TrainJobService.StopJob:output_type -> platformserver.api.v1.StopJobReply | |||||
14, // 22: platformserver.api.v1.TrainJobService.GetJobInfo:output_type -> platformserver.api.v1.TrainJobInfoReply | |||||
11, // 23: platformserver.api.v1.TrainJobService.TrainJobList:output_type -> platformserver.api.v1.TrainJobListReply | |||||
16, // 24: platformserver.api.v1.TrainJobService.TrainJobStastics:output_type -> platformserver.api.v1.TrainJobStasticsReply | |||||
18, // 25: platformserver.api.v1.TrainJobService.PlatformResources:output_type -> platformserver.api.v1.PlatformResourcesReply | |||||
20, // [20:26] is the sub-list for method output_type | |||||
14, // [14:20] is the sub-list for method input_type | |||||
14, // [14:14] is the sub-list for extension type_name | |||||
14, // [14:14] is the sub-list for extension extendee | |||||
0, // [0:14] is the sub-list for field type_name | |||||
} | |||||
func init() { file_server_platform_server_api_v1_trainJob_proto_init() } | |||||
func file_server_platform_server_api_v1_trainJob_proto_init() { | |||||
if File_server_platform_server_api_v1_trainJob_proto != nil { | |||||
return | |||||
} | |||||
if !protoimpl.UnsafeEnabled { | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobRequest); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Image); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Dataset); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Output); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Task); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Parameter); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Resource); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobReply); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*StopJobRequest); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*StopJobReply); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobListRequest); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobListReply); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJob); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobInfoRequest); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobInfoReply); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobStasticsRequest); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*TrainJobStasticsReply); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Node); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_api_v1_trainJob_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*PlatformResourcesReply); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
} | |||||
type x struct{} | |||||
out := protoimpl.TypeBuilder{ | |||||
File: protoimpl.DescBuilder{ | |||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | |||||
RawDescriptor: file_server_platform_server_api_v1_trainJob_proto_rawDesc, | |||||
NumEnums: 0, | |||||
NumMessages: 21, | |||||
NumExtensions: 0, | |||||
NumServices: 1, | |||||
}, | |||||
GoTypes: file_server_platform_server_api_v1_trainJob_proto_goTypes, | |||||
DependencyIndexes: file_server_platform_server_api_v1_trainJob_proto_depIdxs, | |||||
MessageInfos: file_server_platform_server_api_v1_trainJob_proto_msgTypes, | |||||
}.Build() | |||||
File_server_platform_server_api_v1_trainJob_proto = out.File | |||||
file_server_platform_server_api_v1_trainJob_proto_rawDesc = nil | |||||
file_server_platform_server_api_v1_trainJob_proto_goTypes = nil | |||||
file_server_platform_server_api_v1_trainJob_proto_depIdxs = nil | |||||
} |
@@ -1,1658 +0,0 @@ | |||||
// Code generated by protoc-gen-validate. DO NOT EDIT. | |||||
// source: server/platform-server/api/v1/trainJob.proto | |||||
package v1 | |||||
import ( | |||||
"bytes" | |||||
"errors" | |||||
"fmt" | |||||
"net" | |||||
"net/mail" | |||||
"net/url" | |||||
"regexp" | |||||
"strings" | |||||
"time" | |||||
"unicode/utf8" | |||||
"github.com/golang/protobuf/ptypes" | |||||
) | |||||
// ensure the imports are used | |||||
var ( | |||||
_ = bytes.MinRead | |||||
_ = errors.New("") | |||||
_ = fmt.Print | |||||
_ = utf8.UTFMax | |||||
_ = (*regexp.Regexp)(nil) | |||||
_ = (*strings.Reader)(nil) | |||||
_ = net.IPv4len | |||||
_ = time.Duration(0) | |||||
_ = (*url.URL)(nil) | |||||
_ = (*mail.Address)(nil) | |||||
_ = ptypes.DynamicAny{} | |||||
) | |||||
// Validate checks the field values on TrainJobRequest with the rules defined | |||||
// in the proto definition for this message. If any rules are violated, an | |||||
// error is returned. | |||||
func (m *TrainJobRequest) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if l := utf8.RuneCountInString(m.GetName()); l < 1 || l > 30 { | |||||
return TrainJobRequestValidationError{ | |||||
field: "Name", | |||||
reason: "value length must be between 1 and 30 runes, inclusive", | |||||
} | |||||
} | |||||
if utf8.RuneCountInString(m.GetDesc()) > 300 { | |||||
return TrainJobRequestValidationError{ | |||||
field: "Desc", | |||||
reason: "value length must be at most 300 runes", | |||||
} | |||||
} | |||||
if v, ok := interface{}(m.GetImage()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobRequestValidationError{ | |||||
field: "Image", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
if v, ok := interface{}(m.GetOutput()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobRequestValidationError{ | |||||
field: "Output", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
for idx, item := range m.GetDatasets() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobRequestValidationError{ | |||||
field: fmt.Sprintf("Datasets[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
for idx, item := range m.GetTasks() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobRequestValidationError{ | |||||
field: fmt.Sprintf("Tasks[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// TrainJobRequestValidationError is the validation error returned by | |||||
// TrainJobRequest.Validate if the designated constraints aren't met. | |||||
type TrainJobRequestValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobRequestValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobRequestValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobRequestValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobRequestValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobRequestValidationError) ErrorName() string { return "TrainJobRequestValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobRequestValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobRequest.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobRequestValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobRequestValidationError{} | |||||
// Validate checks the field values on Image with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Image) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if l := utf8.RuneCountInString(m.GetName()); l < 1 || l > 300 { | |||||
return ImageValidationError{ | |||||
field: "Name", | |||||
reason: "value length must be between 1 and 300 runes, inclusive", | |||||
} | |||||
} | |||||
if l := utf8.RuneCountInString(m.GetVersion()); l < 1 || l > 30 { | |||||
return ImageValidationError{ | |||||
field: "Version", | |||||
reason: "value length must be between 1 and 30 runes, inclusive", | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// ImageValidationError is the validation error returned by Image.Validate if | |||||
// the designated constraints aren't met. | |||||
type ImageValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e ImageValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e ImageValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e ImageValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e ImageValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e ImageValidationError) ErrorName() string { return "ImageValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e ImageValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sImage.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = ImageValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = ImageValidationError{} | |||||
// Validate checks the field values on Dataset with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Dataset) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if utf8.RuneCountInString(m.GetStorageConfigName()) > 30 { | |||||
return DatasetValidationError{ | |||||
field: "StorageConfigName", | |||||
reason: "value length must be at most 30 runes", | |||||
} | |||||
} | |||||
if utf8.RuneCountInString(m.GetAddr()) > 300 { | |||||
return DatasetValidationError{ | |||||
field: "Addr", | |||||
reason: "value length must be at most 300 runes", | |||||
} | |||||
} | |||||
if utf8.RuneCountInString(m.GetName()) > 300 { | |||||
return DatasetValidationError{ | |||||
field: "Name", | |||||
reason: "value length must be at most 300 runes", | |||||
} | |||||
} | |||||
if utf8.RuneCountInString(m.GetPath()) > 300 { | |||||
return DatasetValidationError{ | |||||
field: "Path", | |||||
reason: "value length must be at most 300 runes", | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// DatasetValidationError is the validation error returned by Dataset.Validate | |||||
// if the designated constraints aren't met. | |||||
type DatasetValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e DatasetValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e DatasetValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e DatasetValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e DatasetValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e DatasetValidationError) ErrorName() string { return "DatasetValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e DatasetValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sDataset.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = DatasetValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = DatasetValidationError{} | |||||
// Validate checks the field values on Output with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Output) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if utf8.RuneCountInString(m.GetStorageConfigName()) > 30 { | |||||
return OutputValidationError{ | |||||
field: "StorageConfigName", | |||||
reason: "value length must be at most 30 runes", | |||||
} | |||||
} | |||||
if utf8.RuneCountInString(m.GetAddr()) > 300 { | |||||
return OutputValidationError{ | |||||
field: "Addr", | |||||
reason: "value length must be at most 300 runes", | |||||
} | |||||
} | |||||
if utf8.RuneCountInString(m.GetPath()) > 300 { | |||||
return OutputValidationError{ | |||||
field: "Path", | |||||
reason: "value length must be at most 300 runes", | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// OutputValidationError is the validation error returned by Output.Validate if | |||||
// the designated constraints aren't met. | |||||
type OutputValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e OutputValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e OutputValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e OutputValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e OutputValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e OutputValidationError) ErrorName() string { return "OutputValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e OutputValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sOutput.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = OutputValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = OutputValidationError{} | |||||
// Validate checks the field values on Task with the rules defined in the proto | |||||
// definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Task) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if l := utf8.RuneCountInString(m.GetName()); l < 1 || l > 30 { | |||||
return TaskValidationError{ | |||||
field: "Name", | |||||
reason: "value length must be between 1 and 30 runes, inclusive", | |||||
} | |||||
} | |||||
if l := utf8.RuneCountInString(m.GetCommand()); l < 0 || l > 300 { | |||||
return TaskValidationError{ | |||||
field: "Command", | |||||
reason: "value length must be between 0 and 300 runes, inclusive", | |||||
} | |||||
} | |||||
for idx, item := range m.GetParameters() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TaskValidationError{ | |||||
field: fmt.Sprintf("Parameters[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
for idx, item := range m.GetResources() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TaskValidationError{ | |||||
field: fmt.Sprintf("Resources[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
if m.GetTaskNumber() < 1 { | |||||
return TaskValidationError{ | |||||
field: "TaskNumber", | |||||
reason: "value must be greater than or equal to 1", | |||||
} | |||||
} | |||||
if m.GetMinFailedTaskCount() < 1 { | |||||
return TaskValidationError{ | |||||
field: "MinFailedTaskCount", | |||||
reason: "value must be greater than or equal to 1", | |||||
} | |||||
} | |||||
if m.GetMinSucceededTaskCount() < 1 { | |||||
return TaskValidationError{ | |||||
field: "MinSucceededTaskCount", | |||||
reason: "value must be greater than or equal to 1", | |||||
} | |||||
} | |||||
// no validation rules for IsMainRole | |||||
return nil | |||||
} | |||||
// TaskValidationError is the validation error returned by Task.Validate if the | |||||
// designated constraints aren't met. | |||||
type TaskValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TaskValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TaskValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TaskValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TaskValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TaskValidationError) ErrorName() string { return "TaskValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e TaskValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTask.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TaskValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TaskValidationError{} | |||||
// Validate checks the field values on Parameter with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Parameter) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for Key | |||||
// no validation rules for Value | |||||
return nil | |||||
} | |||||
// ParameterValidationError is the validation error returned by | |||||
// Parameter.Validate if the designated constraints aren't met. | |||||
type ParameterValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e ParameterValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e ParameterValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e ParameterValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e ParameterValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e ParameterValidationError) ErrorName() string { return "ParameterValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e ParameterValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sParameter.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = ParameterValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = ParameterValidationError{} | |||||
// Validate checks the field values on Resource with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Resource) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for Name | |||||
// no validation rules for Size | |||||
return nil | |||||
} | |||||
// ResourceValidationError is the validation error returned by | |||||
// Resource.Validate if the designated constraints aren't met. | |||||
type ResourceValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e ResourceValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e ResourceValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e ResourceValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e ResourceValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e ResourceValidationError) ErrorName() string { return "ResourceValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e ResourceValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sResource.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = ResourceValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = ResourceValidationError{} | |||||
// Validate checks the field values on TrainJobReply with the rules defined in | |||||
// the proto definition for this message. If any rules are violated, an error | |||||
// is returned. | |||||
func (m *TrainJobReply) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for JobId | |||||
return nil | |||||
} | |||||
// TrainJobReplyValidationError is the validation error returned by | |||||
// TrainJobReply.Validate if the designated constraints aren't met. | |||||
type TrainJobReplyValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobReplyValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobReplyValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobReplyValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobReplyValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobReplyValidationError) ErrorName() string { return "TrainJobReplyValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobReplyValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobReply.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobReplyValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobReplyValidationError{} | |||||
// Validate checks the field values on StopJobRequest with the rules defined in | |||||
// the proto definition for this message. If any rules are violated, an error | |||||
// is returned. | |||||
func (m *StopJobRequest) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if utf8.RuneCountInString(m.GetId()) < 1 { | |||||
return StopJobRequestValidationError{ | |||||
field: "Id", | |||||
reason: "value length must be at least 1 runes", | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// StopJobRequestValidationError is the validation error returned by | |||||
// StopJobRequest.Validate if the designated constraints aren't met. | |||||
type StopJobRequestValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e StopJobRequestValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e StopJobRequestValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e StopJobRequestValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e StopJobRequestValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e StopJobRequestValidationError) ErrorName() string { return "StopJobRequestValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e StopJobRequestValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sStopJobRequest.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = StopJobRequestValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = StopJobRequestValidationError{} | |||||
// Validate checks the field values on StopJobReply with the rules defined in | |||||
// the proto definition for this message. If any rules are violated, an error | |||||
// is returned. | |||||
func (m *StopJobReply) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for StoppedAt | |||||
return nil | |||||
} | |||||
// StopJobReplyValidationError is the validation error returned by | |||||
// StopJobReply.Validate if the designated constraints aren't met. | |||||
type StopJobReplyValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e StopJobReplyValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e StopJobReplyValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e StopJobReplyValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e StopJobReplyValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e StopJobReplyValidationError) ErrorName() string { return "StopJobReplyValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e StopJobReplyValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sStopJobReply.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = StopJobReplyValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = StopJobReplyValidationError{} | |||||
// Validate checks the field values on TrainJobListRequest with the rules | |||||
// defined in the proto definition for this message. If any rules are | |||||
// violated, an error is returned. | |||||
func (m *TrainJobListRequest) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if m.GetPageIndex() < 1 { | |||||
return TrainJobListRequestValidationError{ | |||||
field: "PageIndex", | |||||
reason: "value must be greater than or equal to 1", | |||||
} | |||||
} | |||||
if val := m.GetPageSize(); val < 1 || val >= 100 { | |||||
return TrainJobListRequestValidationError{ | |||||
field: "PageSize", | |||||
reason: "value must be inside range [1, 100)", | |||||
} | |||||
} | |||||
// no validation rules for SortBy | |||||
if _, ok := _TrainJobListRequest_OrderBy_InLookup[m.GetOrderBy()]; !ok { | |||||
return TrainJobListRequestValidationError{ | |||||
field: "OrderBy", | |||||
reason: "value must be in list [ asc desc]", | |||||
} | |||||
} | |||||
// no validation rules for CreatedAtGte | |||||
// no validation rules for CreatedAtLt | |||||
// no validation rules for Status | |||||
// no validation rules for SearchKey | |||||
return nil | |||||
} | |||||
// TrainJobListRequestValidationError is the validation error returned by | |||||
// TrainJobListRequest.Validate if the designated constraints aren't met. | |||||
type TrainJobListRequestValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobListRequestValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobListRequestValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobListRequestValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobListRequestValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobListRequestValidationError) ErrorName() string { | |||||
return "TrainJobListRequestValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobListRequestValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobListRequest.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobListRequestValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobListRequestValidationError{} | |||||
var _TrainJobListRequest_OrderBy_InLookup = map[string]struct{}{ | |||||
"": {}, | |||||
"asc": {}, | |||||
"desc": {}, | |||||
} | |||||
// Validate checks the field values on TrainJobListReply with the rules defined | |||||
// in the proto definition for this message. If any rules are violated, an | |||||
// error is returned. | |||||
func (m *TrainJobListReply) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for TotalSize | |||||
for idx, item := range m.GetTrainJobs() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobListReplyValidationError{ | |||||
field: fmt.Sprintf("TrainJobs[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// TrainJobListReplyValidationError is the validation error returned by | |||||
// TrainJobListReply.Validate if the designated constraints aren't met. | |||||
type TrainJobListReplyValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobListReplyValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobListReplyValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobListReplyValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobListReplyValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobListReplyValidationError) ErrorName() string { | |||||
return "TrainJobListReplyValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobListReplyValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobListReply.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobListReplyValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobListReplyValidationError{} | |||||
// Validate checks the field values on TrainJob with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *TrainJob) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for Id | |||||
// no validation rules for Name | |||||
// no validation rules for Desc | |||||
for idx, item := range m.GetDatasets() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobValidationError{ | |||||
field: fmt.Sprintf("Datasets[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
if v, ok := interface{}(m.GetImage()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobValidationError{ | |||||
field: "Image", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
for idx, item := range m.GetTasks() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobValidationError{ | |||||
field: fmt.Sprintf("Tasks[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
// no validation rules for CreatedAt | |||||
// no validation rules for UpdatedAt | |||||
// no validation rules for Status | |||||
// no validation rules for CompletedAt | |||||
// no validation rules for RunSec | |||||
// no validation rules for StartedAt | |||||
return nil | |||||
} | |||||
// TrainJobValidationError is the validation error returned by | |||||
// TrainJob.Validate if the designated constraints aren't met. | |||||
type TrainJobValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobValidationError) ErrorName() string { return "TrainJobValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJob.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobValidationError{} | |||||
// Validate checks the field values on TrainJobInfoRequest with the rules | |||||
// defined in the proto definition for this message. If any rules are | |||||
// violated, an error is returned. | |||||
func (m *TrainJobInfoRequest) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if utf8.RuneCountInString(m.GetId()) < 1 { | |||||
return TrainJobInfoRequestValidationError{ | |||||
field: "Id", | |||||
reason: "value length must be at least 1 runes", | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// TrainJobInfoRequestValidationError is the validation error returned by | |||||
// TrainJobInfoRequest.Validate if the designated constraints aren't met. | |||||
type TrainJobInfoRequestValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobInfoRequestValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobInfoRequestValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobInfoRequestValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobInfoRequestValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobInfoRequestValidationError) ErrorName() string { | |||||
return "TrainJobInfoRequestValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobInfoRequestValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobInfoRequest.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobInfoRequestValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobInfoRequestValidationError{} | |||||
// Validate checks the field values on TrainJobInfoReply with the rules defined | |||||
// in the proto definition for this message. If any rules are violated, an | |||||
// error is returned. | |||||
func (m *TrainJobInfoReply) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if v, ok := interface{}(m.GetTrainJob()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return TrainJobInfoReplyValidationError{ | |||||
field: "TrainJob", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// TrainJobInfoReplyValidationError is the validation error returned by | |||||
// TrainJobInfoReply.Validate if the designated constraints aren't met. | |||||
type TrainJobInfoReplyValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobInfoReplyValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobInfoReplyValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobInfoReplyValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobInfoReplyValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobInfoReplyValidationError) ErrorName() string { | |||||
return "TrainJobInfoReplyValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobInfoReplyValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobInfoReply.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobInfoReplyValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobInfoReplyValidationError{} | |||||
// Validate checks the field values on TrainJobStasticsRequest with the rules | |||||
// defined in the proto definition for this message. If any rules are | |||||
// violated, an error is returned. | |||||
func (m *TrainJobStasticsRequest) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for CreatedAtGte | |||||
// no validation rules for CreatedAtLt | |||||
return nil | |||||
} | |||||
// TrainJobStasticsRequestValidationError is the validation error returned by | |||||
// TrainJobStasticsRequest.Validate if the designated constraints aren't met. | |||||
type TrainJobStasticsRequestValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobStasticsRequestValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobStasticsRequestValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobStasticsRequestValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobStasticsRequestValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobStasticsRequestValidationError) ErrorName() string { | |||||
return "TrainJobStasticsRequestValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobStasticsRequestValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobStasticsRequest.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobStasticsRequestValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobStasticsRequestValidationError{} | |||||
// Validate checks the field values on TrainJobStasticsReply with the rules | |||||
// defined in the proto definition for this message. If any rules are | |||||
// violated, an error is returned. | |||||
func (m *TrainJobStasticsReply) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for TotalSize | |||||
// no validation rules for SucceededSize | |||||
// no validation rules for FailedSize | |||||
// no validation rules for StoppedSize | |||||
// no validation rules for RunningSize | |||||
// no validation rules for WaitingSize | |||||
return nil | |||||
} | |||||
// TrainJobStasticsReplyValidationError is the validation error returned by | |||||
// TrainJobStasticsReply.Validate if the designated constraints aren't met. | |||||
type TrainJobStasticsReplyValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e TrainJobStasticsReplyValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e TrainJobStasticsReplyValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e TrainJobStasticsReplyValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e TrainJobStasticsReplyValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e TrainJobStasticsReplyValidationError) ErrorName() string { | |||||
return "TrainJobStasticsReplyValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e TrainJobStasticsReplyValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sTrainJobStasticsReply.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = TrainJobStasticsReplyValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = TrainJobStasticsReplyValidationError{} | |||||
// Validate checks the field values on Node with the rules defined in the proto | |||||
// definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Node) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for NodeName | |||||
// no validation rules for Ip | |||||
// no validation rules for Status | |||||
// no validation rules for Capacity | |||||
// no validation rules for Allocated | |||||
return nil | |||||
} | |||||
// NodeValidationError is the validation error returned by Node.Validate if the | |||||
// designated constraints aren't met. | |||||
type NodeValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e NodeValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e NodeValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e NodeValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e NodeValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e NodeValidationError) ErrorName() string { return "NodeValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e NodeValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sNode.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = NodeValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = NodeValidationError{} | |||||
// Validate checks the field values on PlatformResourcesReply with the rules | |||||
// defined in the proto definition for this message. If any rules are | |||||
// violated, an error is returned. | |||||
func (m *PlatformResourcesReply) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
for idx, item := range m.GetResources() { | |||||
_, _ = idx, item | |||||
if v, ok := interface{}(item).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return PlatformResourcesReplyValidationError{ | |||||
field: fmt.Sprintf("Resources[%v]", idx), | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// PlatformResourcesReplyValidationError is the validation error returned by | |||||
// PlatformResourcesReply.Validate if the designated constraints aren't met. | |||||
type PlatformResourcesReplyValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e PlatformResourcesReplyValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e PlatformResourcesReplyValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e PlatformResourcesReplyValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e PlatformResourcesReplyValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e PlatformResourcesReplyValidationError) ErrorName() string { | |||||
return "PlatformResourcesReplyValidationError" | |||||
} | |||||
// Error satisfies the builtin error interface | |||||
func (e PlatformResourcesReplyValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sPlatformResourcesReply.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = PlatformResourcesReplyValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = PlatformResourcesReplyValidationError{} |
@@ -1,638 +0,0 @@ | |||||
{ | |||||
"swagger": "2.0", | |||||
"info": { | |||||
"title": "server/platform-server/api/v1/trainJob.proto", | |||||
"version": "version not set" | |||||
}, | |||||
"tags": [ | |||||
{ | |||||
"name": "TrainJobService" | |||||
} | |||||
], | |||||
"consumes": [ | |||||
"application/json" | |||||
], | |||||
"produces": [ | |||||
"application/json" | |||||
], | |||||
"paths": { | |||||
"/v1/overall/trainjobStastics": { | |||||
"get": { | |||||
"summary": "获取训练任务统计信息", | |||||
"operationId": "TrainJobService_TrainJobStastics", | |||||
"responses": { | |||||
"200": { | |||||
"description": "A successful response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/v1TrainJobStasticsReply" | |||||
} | |||||
}, | |||||
"default": { | |||||
"description": "An unexpected error response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/rpcStatus" | |||||
} | |||||
} | |||||
}, | |||||
"parameters": [ | |||||
{ | |||||
"name": "createdAtGte", | |||||
"description": "大于某个时间创建,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string", | |||||
"format": "int64" | |||||
}, | |||||
{ | |||||
"name": "createdAtLt", | |||||
"description": "小于某个时间创建,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string", | |||||
"format": "int64" | |||||
} | |||||
], | |||||
"tags": [ | |||||
"TrainJobService" | |||||
] | |||||
} | |||||
}, | |||||
"/v1/platform/resource": { | |||||
"get": { | |||||
"summary": "获取集群资源信息", | |||||
"operationId": "TrainJobService_PlatformResources", | |||||
"responses": { | |||||
"200": { | |||||
"description": "A successful response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/v1PlatformResourcesReply" | |||||
} | |||||
}, | |||||
"default": { | |||||
"description": "An unexpected error response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/rpcStatus" | |||||
} | |||||
} | |||||
}, | |||||
"tags": [ | |||||
"TrainJobService" | |||||
] | |||||
} | |||||
}, | |||||
"/v1/platform/trainjob": { | |||||
"get": { | |||||
"summary": "获取训练任务列表", | |||||
"operationId": "TrainJobService_TrainJobList", | |||||
"responses": { | |||||
"200": { | |||||
"description": "A successful response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/v1TrainJobListReply" | |||||
} | |||||
}, | |||||
"default": { | |||||
"description": "An unexpected error response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/rpcStatus" | |||||
} | |||||
} | |||||
}, | |||||
"parameters": [ | |||||
{ | |||||
"name": "pageIndex", | |||||
"description": "页码,从1开始,必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string", | |||||
"format": "int64" | |||||
}, | |||||
{ | |||||
"name": "pageSize", | |||||
"description": "页大小,最小1条,最大100条,必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string", | |||||
"format": "int64" | |||||
}, | |||||
{ | |||||
"name": "sortBy", | |||||
"description": "分组依据,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string" | |||||
}, | |||||
{ | |||||
"name": "orderBy", | |||||
"description": "升序、降序,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string" | |||||
}, | |||||
{ | |||||
"name": "createdAtGte", | |||||
"description": "大于某个时间创建,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string", | |||||
"format": "int64" | |||||
}, | |||||
{ | |||||
"name": "createdAtLt", | |||||
"description": "小于某个时间创建,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string", | |||||
"format": "int64" | |||||
}, | |||||
{ | |||||
"name": "status", | |||||
"description": "状态查询,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string" | |||||
}, | |||||
{ | |||||
"name": "searchKey", | |||||
"description": "模糊查找字段,可用于name等模糊查找,非必填.", | |||||
"in": "query", | |||||
"required": false, | |||||
"type": "string" | |||||
} | |||||
], | |||||
"tags": [ | |||||
"TrainJobService" | |||||
] | |||||
}, | |||||
"post": { | |||||
"summary": "创建训练任务", | |||||
"operationId": "TrainJobService_TrainJob", | |||||
"responses": { | |||||
"200": { | |||||
"description": "A successful response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/v1TrainJobReply" | |||||
} | |||||
}, | |||||
"default": { | |||||
"description": "An unexpected error response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/rpcStatus" | |||||
} | |||||
} | |||||
}, | |||||
"parameters": [ | |||||
{ | |||||
"name": "body", | |||||
"in": "body", | |||||
"required": true, | |||||
"schema": { | |||||
"$ref": "#/definitions/v1TrainJobRequest" | |||||
} | |||||
} | |||||
], | |||||
"tags": [ | |||||
"TrainJobService" | |||||
] | |||||
} | |||||
}, | |||||
"/v1/platform/trainjob/{id}": { | |||||
"get": { | |||||
"summary": "获取训练任务详情", | |||||
"operationId": "TrainJobService_GetJobInfo", | |||||
"responses": { | |||||
"200": { | |||||
"description": "A successful response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/v1TrainJobInfoReply" | |||||
} | |||||
}, | |||||
"default": { | |||||
"description": "An unexpected error response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/rpcStatus" | |||||
} | |||||
} | |||||
}, | |||||
"parameters": [ | |||||
{ | |||||
"name": "id", | |||||
"description": "任务ID", | |||||
"in": "path", | |||||
"required": true, | |||||
"type": "string" | |||||
} | |||||
], | |||||
"tags": [ | |||||
"TrainJobService" | |||||
] | |||||
} | |||||
}, | |||||
"/v1/platform/trainjob/{id}/stop": { | |||||
"post": { | |||||
"summary": "停止训练任务", | |||||
"operationId": "TrainJobService_StopJob", | |||||
"responses": { | |||||
"200": { | |||||
"description": "A successful response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/v1StopJobReply" | |||||
} | |||||
}, | |||||
"default": { | |||||
"description": "An unexpected error response.", | |||||
"schema": { | |||||
"$ref": "#/definitions/rpcStatus" | |||||
} | |||||
} | |||||
}, | |||||
"parameters": [ | |||||
{ | |||||
"name": "id", | |||||
"description": "任务ID", | |||||
"in": "path", | |||||
"required": true, | |||||
"type": "string" | |||||
}, | |||||
{ | |||||
"name": "body", | |||||
"in": "body", | |||||
"required": true, | |||||
"schema": { | |||||
"type": "object" | |||||
} | |||||
} | |||||
], | |||||
"tags": [ | |||||
"TrainJobService" | |||||
] | |||||
} | |||||
} | |||||
}, | |||||
"definitions": { | |||||
"protobufAny": { | |||||
"type": "object", | |||||
"properties": { | |||||
"@type": { | |||||
"type": "string" | |||||
} | |||||
}, | |||||
"additionalProperties": {} | |||||
}, | |||||
"rpcStatus": { | |||||
"type": "object", | |||||
"properties": { | |||||
"code": { | |||||
"type": "integer", | |||||
"format": "int32" | |||||
}, | |||||
"message": { | |||||
"type": "string" | |||||
}, | |||||
"details": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/protobufAny" | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"v1Dataset": { | |||||
"type": "object", | |||||
"properties": { | |||||
"storageConfigName": { | |||||
"type": "string", | |||||
"title": "存储配置名称,必填" | |||||
}, | |||||
"addr": { | |||||
"type": "string", | |||||
"title": "数据集子目录" | |||||
}, | |||||
"name": { | |||||
"type": "string", | |||||
"title": "数据集名称,必填" | |||||
}, | |||||
"path": { | |||||
"type": "string", | |||||
"title": "数据集容器内路径" | |||||
} | |||||
} | |||||
}, | |||||
"v1Image": { | |||||
"type": "object", | |||||
"properties": { | |||||
"name": { | |||||
"type": "string" | |||||
}, | |||||
"version": { | |||||
"type": "string" | |||||
} | |||||
} | |||||
}, | |||||
"v1Node": { | |||||
"type": "object", | |||||
"properties": { | |||||
"nodeName": { | |||||
"type": "string" | |||||
}, | |||||
"ip": { | |||||
"type": "string" | |||||
}, | |||||
"status": { | |||||
"type": "string" | |||||
}, | |||||
"capacity": { | |||||
"type": "object", | |||||
"additionalProperties": { | |||||
"type": "string" | |||||
} | |||||
}, | |||||
"allocated": { | |||||
"type": "object", | |||||
"additionalProperties": { | |||||
"type": "string" | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"v1Output": { | |||||
"type": "object", | |||||
"properties": { | |||||
"storageConfigName": { | |||||
"type": "string", | |||||
"title": "存储配置名称,必填" | |||||
}, | |||||
"addr": { | |||||
"type": "string", | |||||
"title": "存储子目录" | |||||
}, | |||||
"path": { | |||||
"type": "string", | |||||
"title": "容器内输出路径" | |||||
} | |||||
} | |||||
}, | |||||
"v1Parameter": { | |||||
"type": "object", | |||||
"properties": { | |||||
"key": { | |||||
"type": "string", | |||||
"title": "命令参数key,非必填" | |||||
}, | |||||
"value": { | |||||
"type": "string", | |||||
"title": "命令参数value,非必填" | |||||
} | |||||
} | |||||
}, | |||||
"v1PlatformResourcesReply": { | |||||
"type": "object", | |||||
"properties": { | |||||
"resources": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Node" | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"v1Resource": { | |||||
"type": "object", | |||||
"properties": { | |||||
"name": { | |||||
"type": "string", | |||||
"title": "命令参数key,必填" | |||||
}, | |||||
"size": { | |||||
"type": "string", | |||||
"title": "命令参数value,必填" | |||||
} | |||||
} | |||||
}, | |||||
"v1StopJobReply": { | |||||
"type": "object", | |||||
"properties": { | |||||
"stoppedAt": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "停止时间" | |||||
} | |||||
} | |||||
}, | |||||
"v1Task": { | |||||
"type": "object", | |||||
"properties": { | |||||
"name": { | |||||
"type": "string", | |||||
"title": "子任务名称,非必填,校验规则\"^[0-9a-zA-Z_]*$\",最大长度30个字符" | |||||
}, | |||||
"command": { | |||||
"type": "string", | |||||
"title": "子任务执行命令" | |||||
}, | |||||
"parameters": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Parameter" | |||||
}, | |||||
"title": "command执行命令参数,key-value,数组" | |||||
}, | |||||
"resources": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Resource" | |||||
}, | |||||
"title": "资源" | |||||
}, | |||||
"taskNumber": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "副本个数,非必填" | |||||
}, | |||||
"minFailedTaskCount": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "子任务最小失败数,非必填" | |||||
}, | |||||
"minSucceededTaskCount": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "子任务最小成功数,非必填" | |||||
}, | |||||
"isMainRole": { | |||||
"type": "boolean", | |||||
"title": "是否主任务,非必填" | |||||
} | |||||
} | |||||
}, | |||||
"v1TrainJob": { | |||||
"type": "object", | |||||
"properties": { | |||||
"id": { | |||||
"type": "string", | |||||
"title": "任务ID" | |||||
}, | |||||
"name": { | |||||
"type": "string", | |||||
"title": "job名称" | |||||
}, | |||||
"desc": { | |||||
"type": "string", | |||||
"title": "job描述" | |||||
}, | |||||
"datasets": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Dataset" | |||||
}, | |||||
"title": "数据集" | |||||
}, | |||||
"image": { | |||||
"$ref": "#/definitions/v1Image", | |||||
"title": "镜像" | |||||
}, | |||||
"tasks": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Task" | |||||
}, | |||||
"title": "子任务配置信息" | |||||
}, | |||||
"createdAt": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "创建时间" | |||||
}, | |||||
"updatedAt": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "更新时间" | |||||
}, | |||||
"status": { | |||||
"type": "string", | |||||
"title": "任务状态" | |||||
}, | |||||
"completedAt": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "job完成时间" | |||||
}, | |||||
"runSec": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "运行时" | |||||
}, | |||||
"startedAt": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "启动时间" | |||||
} | |||||
} | |||||
}, | |||||
"v1TrainJobInfoReply": { | |||||
"type": "object", | |||||
"properties": { | |||||
"trainJob": { | |||||
"$ref": "#/definitions/v1TrainJob", | |||||
"title": "训练任务" | |||||
} | |||||
} | |||||
}, | |||||
"v1TrainJobListReply": { | |||||
"type": "object", | |||||
"properties": { | |||||
"totalSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "查询结果总数" | |||||
}, | |||||
"trainJobs": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1TrainJob" | |||||
}, | |||||
"title": "任务" | |||||
} | |||||
} | |||||
}, | |||||
"v1TrainJobReply": { | |||||
"type": "object", | |||||
"properties": { | |||||
"jobId": { | |||||
"type": "string", | |||||
"title": "训练任务ID,必填" | |||||
} | |||||
} | |||||
}, | |||||
"v1TrainJobRequest": { | |||||
"type": "object", | |||||
"properties": { | |||||
"name": { | |||||
"type": "string", | |||||
"title": "训练任务名称,必填,长度1-30" | |||||
}, | |||||
"desc": { | |||||
"type": "string", | |||||
"title": "训练任务描述,非必填" | |||||
}, | |||||
"image": { | |||||
"$ref": "#/definitions/v1Image", | |||||
"title": "镜像信息" | |||||
}, | |||||
"output": { | |||||
"$ref": "#/definitions/v1Output", | |||||
"title": "输出路径信息" | |||||
}, | |||||
"datasets": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Dataset" | |||||
}, | |||||
"title": "数据集信息" | |||||
}, | |||||
"tasks": { | |||||
"type": "array", | |||||
"items": { | |||||
"$ref": "#/definitions/v1Task" | |||||
}, | |||||
"title": "子任务信息" | |||||
} | |||||
} | |||||
}, | |||||
"v1TrainJobStasticsReply": { | |||||
"type": "object", | |||||
"properties": { | |||||
"totalSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "任务数量" | |||||
}, | |||||
"succeededSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "成功数量" | |||||
}, | |||||
"failedSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "失败数量" | |||||
}, | |||||
"stoppedSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "停止数量" | |||||
}, | |||||
"runningSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "正在运行数量" | |||||
}, | |||||
"waitingSize": { | |||||
"type": "string", | |||||
"format": "int64", | |||||
"title": "等待数量" | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,294 +0,0 @@ | |||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT. | |||||
package v1 | |||||
import ( | |||||
context "context" | |||||
grpc "google.golang.org/grpc" | |||||
codes "google.golang.org/grpc/codes" | |||||
status "google.golang.org/grpc/status" | |||||
emptypb "google.golang.org/protobuf/types/known/emptypb" | |||||
) | |||||
// This is a compile-time assertion to ensure that this generated file | |||||
// is compatible with the grpc package it is being compiled against. | |||||
// Requires gRPC-Go v1.32.0 or later. | |||||
const _ = grpc.SupportPackageIsVersion7 | |||||
// TrainJobServiceClient is the client API for TrainJobService service. | |||||
// | |||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. | |||||
type TrainJobServiceClient interface { | |||||
// 创建训练任务 | |||||
TrainJob(ctx context.Context, in *TrainJobRequest, opts ...grpc.CallOption) (*TrainJobReply, error) | |||||
//停止训练任务 | |||||
StopJob(ctx context.Context, in *StopJobRequest, opts ...grpc.CallOption) (*StopJobReply, error) | |||||
// 获取训练任务详情 | |||||
GetJobInfo(ctx context.Context, in *TrainJobInfoRequest, opts ...grpc.CallOption) (*TrainJobInfoReply, error) | |||||
//获取训练任务列表 | |||||
TrainJobList(ctx context.Context, in *TrainJobListRequest, opts ...grpc.CallOption) (*TrainJobListReply, error) | |||||
//获取训练任务统计信息 | |||||
TrainJobStastics(ctx context.Context, in *TrainJobStasticsRequest, opts ...grpc.CallOption) (*TrainJobStasticsReply, error) | |||||
//获取集群资源信息 | |||||
PlatformResources(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*PlatformResourcesReply, error) | |||||
} | |||||
type trainJobServiceClient struct { | |||||
cc grpc.ClientConnInterface | |||||
} | |||||
func NewTrainJobServiceClient(cc grpc.ClientConnInterface) TrainJobServiceClient { | |||||
return &trainJobServiceClient{cc} | |||||
} | |||||
func (c *trainJobServiceClient) TrainJob(ctx context.Context, in *TrainJobRequest, opts ...grpc.CallOption) (*TrainJobReply, error) { | |||||
out := new(TrainJobReply) | |||||
err := c.cc.Invoke(ctx, "/platformserver.api.v1.TrainJobService/TrainJob", in, out, opts...) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return out, nil | |||||
} | |||||
func (c *trainJobServiceClient) StopJob(ctx context.Context, in *StopJobRequest, opts ...grpc.CallOption) (*StopJobReply, error) { | |||||
out := new(StopJobReply) | |||||
err := c.cc.Invoke(ctx, "/platformserver.api.v1.TrainJobService/StopJob", in, out, opts...) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return out, nil | |||||
} | |||||
func (c *trainJobServiceClient) GetJobInfo(ctx context.Context, in *TrainJobInfoRequest, opts ...grpc.CallOption) (*TrainJobInfoReply, error) { | |||||
out := new(TrainJobInfoReply) | |||||
err := c.cc.Invoke(ctx, "/platformserver.api.v1.TrainJobService/GetJobInfo", in, out, opts...) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return out, nil | |||||
} | |||||
func (c *trainJobServiceClient) TrainJobList(ctx context.Context, in *TrainJobListRequest, opts ...grpc.CallOption) (*TrainJobListReply, error) { | |||||
out := new(TrainJobListReply) | |||||
err := c.cc.Invoke(ctx, "/platformserver.api.v1.TrainJobService/TrainJobList", in, out, opts...) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return out, nil | |||||
} | |||||
func (c *trainJobServiceClient) TrainJobStastics(ctx context.Context, in *TrainJobStasticsRequest, opts ...grpc.CallOption) (*TrainJobStasticsReply, error) { | |||||
out := new(TrainJobStasticsReply) | |||||
err := c.cc.Invoke(ctx, "/platformserver.api.v1.TrainJobService/TrainJobStastics", in, out, opts...) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return out, nil | |||||
} | |||||
func (c *trainJobServiceClient) PlatformResources(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*PlatformResourcesReply, error) { | |||||
out := new(PlatformResourcesReply) | |||||
err := c.cc.Invoke(ctx, "/platformserver.api.v1.TrainJobService/PlatformResources", in, out, opts...) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return out, nil | |||||
} | |||||
// TrainJobServiceServer is the server API for TrainJobService service. | |||||
// All implementations must embed UnimplementedTrainJobServiceServer | |||||
// for forward compatibility | |||||
type TrainJobServiceServer interface { | |||||
// 创建训练任务 | |||||
TrainJob(context.Context, *TrainJobRequest) (*TrainJobReply, error) | |||||
//停止训练任务 | |||||
StopJob(context.Context, *StopJobRequest) (*StopJobReply, error) | |||||
// 获取训练任务详情 | |||||
GetJobInfo(context.Context, *TrainJobInfoRequest) (*TrainJobInfoReply, error) | |||||
//获取训练任务列表 | |||||
TrainJobList(context.Context, *TrainJobListRequest) (*TrainJobListReply, error) | |||||
//获取训练任务统计信息 | |||||
TrainJobStastics(context.Context, *TrainJobStasticsRequest) (*TrainJobStasticsReply, error) | |||||
//获取集群资源信息 | |||||
PlatformResources(context.Context, *emptypb.Empty) (*PlatformResourcesReply, error) | |||||
mustEmbedUnimplementedTrainJobServiceServer() | |||||
} | |||||
// UnimplementedTrainJobServiceServer must be embedded to have forward compatible implementations. | |||||
type UnimplementedTrainJobServiceServer struct { | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) TrainJob(context.Context, *TrainJobRequest) (*TrainJobReply, error) { | |||||
return nil, status.Errorf(codes.Unimplemented, "method TrainJob not implemented") | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) StopJob(context.Context, *StopJobRequest) (*StopJobReply, error) { | |||||
return nil, status.Errorf(codes.Unimplemented, "method StopJob not implemented") | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) GetJobInfo(context.Context, *TrainJobInfoRequest) (*TrainJobInfoReply, error) { | |||||
return nil, status.Errorf(codes.Unimplemented, "method GetJobInfo not implemented") | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) TrainJobList(context.Context, *TrainJobListRequest) (*TrainJobListReply, error) { | |||||
return nil, status.Errorf(codes.Unimplemented, "method TrainJobList not implemented") | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) TrainJobStastics(context.Context, *TrainJobStasticsRequest) (*TrainJobStasticsReply, error) { | |||||
return nil, status.Errorf(codes.Unimplemented, "method TrainJobStastics not implemented") | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) PlatformResources(context.Context, *emptypb.Empty) (*PlatformResourcesReply, error) { | |||||
return nil, status.Errorf(codes.Unimplemented, "method PlatformResources not implemented") | |||||
} | |||||
func (UnimplementedTrainJobServiceServer) mustEmbedUnimplementedTrainJobServiceServer() {} | |||||
// UnsafeTrainJobServiceServer may be embedded to opt out of forward compatibility for this service. | |||||
// Use of this interface is not recommended, as added methods to TrainJobServiceServer will | |||||
// result in compilation errors. | |||||
type UnsafeTrainJobServiceServer interface { | |||||
mustEmbedUnimplementedTrainJobServiceServer() | |||||
} | |||||
func RegisterTrainJobServiceServer(s grpc.ServiceRegistrar, srv TrainJobServiceServer) { | |||||
s.RegisterService(&TrainJobService_ServiceDesc, srv) | |||||
} | |||||
func _TrainJobService_TrainJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||||
in := new(TrainJobRequest) | |||||
if err := dec(in); err != nil { | |||||
return nil, err | |||||
} | |||||
if interceptor == nil { | |||||
return srv.(TrainJobServiceServer).TrainJob(ctx, in) | |||||
} | |||||
info := &grpc.UnaryServerInfo{ | |||||
Server: srv, | |||||
FullMethod: "/platformserver.api.v1.TrainJobService/TrainJob", | |||||
} | |||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.(TrainJobServiceServer).TrainJob(ctx, req.(*TrainJobRequest)) | |||||
} | |||||
return interceptor(ctx, in, info, handler) | |||||
} | |||||
func _TrainJobService_StopJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||||
in := new(StopJobRequest) | |||||
if err := dec(in); err != nil { | |||||
return nil, err | |||||
} | |||||
if interceptor == nil { | |||||
return srv.(TrainJobServiceServer).StopJob(ctx, in) | |||||
} | |||||
info := &grpc.UnaryServerInfo{ | |||||
Server: srv, | |||||
FullMethod: "/platformserver.api.v1.TrainJobService/StopJob", | |||||
} | |||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.(TrainJobServiceServer).StopJob(ctx, req.(*StopJobRequest)) | |||||
} | |||||
return interceptor(ctx, in, info, handler) | |||||
} | |||||
func _TrainJobService_GetJobInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||||
in := new(TrainJobInfoRequest) | |||||
if err := dec(in); err != nil { | |||||
return nil, err | |||||
} | |||||
if interceptor == nil { | |||||
return srv.(TrainJobServiceServer).GetJobInfo(ctx, in) | |||||
} | |||||
info := &grpc.UnaryServerInfo{ | |||||
Server: srv, | |||||
FullMethod: "/platformserver.api.v1.TrainJobService/GetJobInfo", | |||||
} | |||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.(TrainJobServiceServer).GetJobInfo(ctx, req.(*TrainJobInfoRequest)) | |||||
} | |||||
return interceptor(ctx, in, info, handler) | |||||
} | |||||
func _TrainJobService_TrainJobList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||||
in := new(TrainJobListRequest) | |||||
if err := dec(in); err != nil { | |||||
return nil, err | |||||
} | |||||
if interceptor == nil { | |||||
return srv.(TrainJobServiceServer).TrainJobList(ctx, in) | |||||
} | |||||
info := &grpc.UnaryServerInfo{ | |||||
Server: srv, | |||||
FullMethod: "/platformserver.api.v1.TrainJobService/TrainJobList", | |||||
} | |||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.(TrainJobServiceServer).TrainJobList(ctx, req.(*TrainJobListRequest)) | |||||
} | |||||
return interceptor(ctx, in, info, handler) | |||||
} | |||||
func _TrainJobService_TrainJobStastics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||||
in := new(TrainJobStasticsRequest) | |||||
if err := dec(in); err != nil { | |||||
return nil, err | |||||
} | |||||
if interceptor == nil { | |||||
return srv.(TrainJobServiceServer).TrainJobStastics(ctx, in) | |||||
} | |||||
info := &grpc.UnaryServerInfo{ | |||||
Server: srv, | |||||
FullMethod: "/platformserver.api.v1.TrainJobService/TrainJobStastics", | |||||
} | |||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.(TrainJobServiceServer).TrainJobStastics(ctx, req.(*TrainJobStasticsRequest)) | |||||
} | |||||
return interceptor(ctx, in, info, handler) | |||||
} | |||||
func _TrainJobService_PlatformResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||||
in := new(emptypb.Empty) | |||||
if err := dec(in); err != nil { | |||||
return nil, err | |||||
} | |||||
if interceptor == nil { | |||||
return srv.(TrainJobServiceServer).PlatformResources(ctx, in) | |||||
} | |||||
info := &grpc.UnaryServerInfo{ | |||||
Server: srv, | |||||
FullMethod: "/platformserver.api.v1.TrainJobService/PlatformResources", | |||||
} | |||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.(TrainJobServiceServer).PlatformResources(ctx, req.(*emptypb.Empty)) | |||||
} | |||||
return interceptor(ctx, in, info, handler) | |||||
} | |||||
// TrainJobService_ServiceDesc is the grpc.ServiceDesc for TrainJobService service. | |||||
// It's only intended for direct use with grpc.RegisterService, | |||||
// and not to be introspected or modified (even as a copy) | |||||
var TrainJobService_ServiceDesc = grpc.ServiceDesc{ | |||||
ServiceName: "platformserver.api.v1.TrainJobService", | |||||
HandlerType: (*TrainJobServiceServer)(nil), | |||||
Methods: []grpc.MethodDesc{ | |||||
{ | |||||
MethodName: "TrainJob", | |||||
Handler: _TrainJobService_TrainJob_Handler, | |||||
}, | |||||
{ | |||||
MethodName: "StopJob", | |||||
Handler: _TrainJobService_StopJob_Handler, | |||||
}, | |||||
{ | |||||
MethodName: "GetJobInfo", | |||||
Handler: _TrainJobService_GetJobInfo_Handler, | |||||
}, | |||||
{ | |||||
MethodName: "TrainJobList", | |||||
Handler: _TrainJobService_TrainJobList_Handler, | |||||
}, | |||||
{ | |||||
MethodName: "TrainJobStastics", | |||||
Handler: _TrainJobService_TrainJobStastics_Handler, | |||||
}, | |||||
{ | |||||
MethodName: "PlatformResources", | |||||
Handler: _TrainJobService_PlatformResources_Handler, | |||||
}, | |||||
}, | |||||
Streams: []grpc.StreamDesc{}, | |||||
Metadata: "server/platform-server/api/v1/trainJob.proto", | |||||
} |
@@ -1,199 +0,0 @@ | |||||
// Code generated by protoc-gen-go-http. DO NOT EDIT. | |||||
package v1 | |||||
import ( | |||||
context "context" | |||||
http1 "github.com/go-kratos/kratos/v2/transport/http" | |||||
binding "github.com/go-kratos/kratos/v2/transport/http/binding" | |||||
mux "github.com/gorilla/mux" | |||||
emptypb "google.golang.org/protobuf/types/known/emptypb" | |||||
http "net/http" | |||||
) | |||||
// This is a compile-time assertion to ensure that this generated file | |||||
// is compatible with the kratos package it is being compiled against. | |||||
var _ = new(http.Request) | |||||
var _ = new(context.Context) | |||||
var _ = binding.MapProto | |||||
var _ = mux.NewRouter | |||||
const _ = http1.SupportPackageIsVersion1 | |||||
type TrainJobServiceHandler interface { | |||||
GetJobInfo(context.Context, *TrainJobInfoRequest) (*TrainJobInfoReply, error) | |||||
PlatformResources(context.Context, *emptypb.Empty) (*PlatformResourcesReply, error) | |||||
StopJob(context.Context, *StopJobRequest) (*StopJobReply, error) | |||||
TrainJob(context.Context, *TrainJobRequest) (*TrainJobReply, error) | |||||
TrainJobList(context.Context, *TrainJobListRequest) (*TrainJobListReply, error) | |||||
TrainJobStastics(context.Context, *TrainJobStasticsRequest) (*TrainJobStasticsReply, error) | |||||
} | |||||
func NewTrainJobServiceHandler(srv TrainJobServiceHandler, opts ...http1.HandleOption) http.Handler { | |||||
h := http1.DefaultHandleOptions() | |||||
for _, o := range opts { | |||||
o(&h) | |||||
} | |||||
r := mux.NewRouter() | |||||
r.HandleFunc("/v1/platform/trainjob", func(w http.ResponseWriter, r *http.Request) { | |||||
var in TrainJobRequest | |||||
if err := h.Decode(r, &in); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
next := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.TrainJob(ctx, req.(*TrainJobRequest)) | |||||
} | |||||
if h.Middleware != nil { | |||||
next = h.Middleware(next) | |||||
} | |||||
out, err := next(r.Context(), &in) | |||||
if err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
reply := out.(*TrainJobReply) | |||||
if err := h.Encode(w, r, reply); err != nil { | |||||
h.Error(w, r, err) | |||||
} | |||||
}).Methods("POST") | |||||
r.HandleFunc("/v1/platform/trainjob/{id}/stop", func(w http.ResponseWriter, r *http.Request) { | |||||
var in StopJobRequest | |||||
if err := h.Decode(r, &in); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
if err := binding.MapProto(&in, mux.Vars(r)); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
next := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.StopJob(ctx, req.(*StopJobRequest)) | |||||
} | |||||
if h.Middleware != nil { | |||||
next = h.Middleware(next) | |||||
} | |||||
out, err := next(r.Context(), &in) | |||||
if err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
reply := out.(*StopJobReply) | |||||
if err := h.Encode(w, r, reply); err != nil { | |||||
h.Error(w, r, err) | |||||
} | |||||
}).Methods("POST") | |||||
r.HandleFunc("/v1/platform/trainjob/{id}", func(w http.ResponseWriter, r *http.Request) { | |||||
var in TrainJobInfoRequest | |||||
if err := h.Decode(r, &in); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
if err := binding.MapProto(&in, mux.Vars(r)); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
next := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.GetJobInfo(ctx, req.(*TrainJobInfoRequest)) | |||||
} | |||||
if h.Middleware != nil { | |||||
next = h.Middleware(next) | |||||
} | |||||
out, err := next(r.Context(), &in) | |||||
if err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
reply := out.(*TrainJobInfoReply) | |||||
if err := h.Encode(w, r, reply); err != nil { | |||||
h.Error(w, r, err) | |||||
} | |||||
}).Methods("GET") | |||||
r.HandleFunc("/v1/platform/trainjob", func(w http.ResponseWriter, r *http.Request) { | |||||
var in TrainJobListRequest | |||||
if err := h.Decode(r, &in); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
next := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.TrainJobList(ctx, req.(*TrainJobListRequest)) | |||||
} | |||||
if h.Middleware != nil { | |||||
next = h.Middleware(next) | |||||
} | |||||
out, err := next(r.Context(), &in) | |||||
if err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
reply := out.(*TrainJobListReply) | |||||
if err := h.Encode(w, r, reply); err != nil { | |||||
h.Error(w, r, err) | |||||
} | |||||
}).Methods("GET") | |||||
r.HandleFunc("/v1/overall/trainjobStastics", func(w http.ResponseWriter, r *http.Request) { | |||||
var in TrainJobStasticsRequest | |||||
if err := h.Decode(r, &in); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
next := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.TrainJobStastics(ctx, req.(*TrainJobStasticsRequest)) | |||||
} | |||||
if h.Middleware != nil { | |||||
next = h.Middleware(next) | |||||
} | |||||
out, err := next(r.Context(), &in) | |||||
if err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
reply := out.(*TrainJobStasticsReply) | |||||
if err := h.Encode(w, r, reply); err != nil { | |||||
h.Error(w, r, err) | |||||
} | |||||
}).Methods("GET") | |||||
r.HandleFunc("/v1/platform/resource", func(w http.ResponseWriter, r *http.Request) { | |||||
var in emptypb.Empty | |||||
if err := h.Decode(r, &in); err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
next := func(ctx context.Context, req interface{}) (interface{}, error) { | |||||
return srv.PlatformResources(ctx, req.(*emptypb.Empty)) | |||||
} | |||||
if h.Middleware != nil { | |||||
next = h.Middleware(next) | |||||
} | |||||
out, err := next(r.Context(), &in) | |||||
if err != nil { | |||||
h.Error(w, r, err) | |||||
return | |||||
} | |||||
reply := out.(*PlatformResourcesReply) | |||||
if err := h.Encode(w, r, reply); err != nil { | |||||
h.Error(w, r, err) | |||||
} | |||||
}).Methods("GET") | |||||
return r | |||||
} |
@@ -1,674 +0,0 @@ | |||||
// Code generated by protoc-gen-go. DO NOT EDIT. | |||||
// versions: | |||||
// protoc-gen-go v1.26.0 | |||||
// protoc v3.15.8 | |||||
// source: server/platform-server/internal/conf/conf.proto | |||||
package conf | |||||
import ( | |||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||||
durationpb "google.golang.org/protobuf/types/known/durationpb" | |||||
reflect "reflect" | |||||
sync "sync" | |||||
) | |||||
const ( | |||||
// Verify that this generated code is sufficiently up-to-date. | |||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | |||||
// Verify that runtime/protoimpl is sufficiently up-to-date. | |||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | |||||
) | |||||
type Bootstrap struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
App *App `protobuf:"bytes,1,opt,name=app,proto3" json:"app"` | |||||
Server *Server `protobuf:"bytes,2,opt,name=server,proto3" json:"server"` | |||||
Data *Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data"` | |||||
Service *Service `protobuf:"bytes,4,opt,name=service,proto3" json:"service"` | |||||
} | |||||
func (x *Bootstrap) Reset() { | |||||
*x = Bootstrap{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[0] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Bootstrap) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Bootstrap) ProtoMessage() {} | |||||
func (x *Bootstrap) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[0] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Bootstrap.ProtoReflect.Descriptor instead. | |||||
func (*Bootstrap) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{0} | |||||
} | |||||
func (x *Bootstrap) GetApp() *App { | |||||
if x != nil { | |||||
return x.App | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Bootstrap) GetServer() *Server { | |||||
if x != nil { | |||||
return x.Server | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Bootstrap) GetData() *Data { | |||||
if x != nil { | |||||
return x.Data | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Bootstrap) GetService() *Service { | |||||
if x != nil { | |||||
return x.Service | |||||
} | |||||
return nil | |||||
} | |||||
type App struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` | |||||
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version"` | |||||
IsDev bool `protobuf:"varint,3,opt,name=isDev,proto3" json:"isDev"` | |||||
LogLevel string `protobuf:"bytes,4,opt,name=logLevel,proto3" json:"logLevel"` | |||||
} | |||||
func (x *App) Reset() { | |||||
*x = App{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[1] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *App) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*App) ProtoMessage() {} | |||||
func (x *App) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[1] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use App.ProtoReflect.Descriptor instead. | |||||
func (*App) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{1} | |||||
} | |||||
func (x *App) GetName() string { | |||||
if x != nil { | |||||
return x.Name | |||||
} | |||||
return "" | |||||
} | |||||
func (x *App) GetVersion() string { | |||||
if x != nil { | |||||
return x.Version | |||||
} | |||||
return "" | |||||
} | |||||
func (x *App) GetIsDev() bool { | |||||
if x != nil { | |||||
return x.IsDev | |||||
} | |||||
return false | |||||
} | |||||
func (x *App) GetLogLevel() string { | |||||
if x != nil { | |||||
return x.LogLevel | |||||
} | |||||
return "" | |||||
} | |||||
type Server struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
Http *Server_HTTP `protobuf:"bytes,1,opt,name=http,proto3" json:"http"` | |||||
} | |||||
func (x *Server) Reset() { | |||||
*x = Server{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[2] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Server) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Server) ProtoMessage() {} | |||||
func (x *Server) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[2] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Server.ProtoReflect.Descriptor instead. | |||||
func (*Server) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{2} | |||||
} | |||||
func (x *Server) GetHttp() *Server_HTTP { | |||||
if x != nil { | |||||
return x.Http | |||||
} | |||||
return nil | |||||
} | |||||
type Data struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
BaseServerAddr string `protobuf:"bytes,1,opt,name=baseServerAddr,proto3" json:"baseServerAddr"` | |||||
Redis *Data_Redis `protobuf:"bytes,2,opt,name=redis,proto3" json:"redis"` | |||||
BaseServerRequestTimeout string `protobuf:"bytes,3,opt,name=baseServerRequestTimeout,proto3" json:"baseServerRequestTimeout"` | |||||
} | |||||
func (x *Data) Reset() { | |||||
*x = Data{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[3] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Data) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Data) ProtoMessage() {} | |||||
func (x *Data) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[3] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Data.ProtoReflect.Descriptor instead. | |||||
func (*Data) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{3} | |||||
} | |||||
func (x *Data) GetBaseServerAddr() string { | |||||
if x != nil { | |||||
return x.BaseServerAddr | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Data) GetRedis() *Data_Redis { | |||||
if x != nil { | |||||
return x.Redis | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Data) GetBaseServerRequestTimeout() string { | |||||
if x != nil { | |||||
return x.BaseServerRequestTimeout | |||||
} | |||||
return "" | |||||
} | |||||
type Service struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
TokenExpirationSec int64 `protobuf:"varint,1,opt,name=tokenExpirationSec,proto3" json:"tokenExpirationSec"` | |||||
} | |||||
func (x *Service) Reset() { | |||||
*x = Service{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[4] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Service) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Service) ProtoMessage() {} | |||||
func (x *Service) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[4] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Service.ProtoReflect.Descriptor instead. | |||||
func (*Service) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{4} | |||||
} | |||||
func (x *Service) GetTokenExpirationSec() int64 { | |||||
if x != nil { | |||||
return x.TokenExpirationSec | |||||
} | |||||
return 0 | |||||
} | |||||
type Server_HTTP struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
Network string `protobuf:"bytes,1,opt,name=network,proto3" json:"network"` | |||||
Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr"` | |||||
Timeout *durationpb.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout"` | |||||
JwtSecrect string `protobuf:"bytes,4,opt,name=jwtSecrect,proto3" json:"jwtSecrect"` | |||||
} | |||||
func (x *Server_HTTP) Reset() { | |||||
*x = Server_HTTP{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[5] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Server_HTTP) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Server_HTTP) ProtoMessage() {} | |||||
func (x *Server_HTTP) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[5] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Server_HTTP.ProtoReflect.Descriptor instead. | |||||
func (*Server_HTTP) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{2, 0} | |||||
} | |||||
func (x *Server_HTTP) GetNetwork() string { | |||||
if x != nil { | |||||
return x.Network | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Server_HTTP) GetAddr() string { | |||||
if x != nil { | |||||
return x.Addr | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Server_HTTP) GetTimeout() *durationpb.Duration { | |||||
if x != nil { | |||||
return x.Timeout | |||||
} | |||||
return nil | |||||
} | |||||
func (x *Server_HTTP) GetJwtSecrect() string { | |||||
if x != nil { | |||||
return x.JwtSecrect | |||||
} | |||||
return "" | |||||
} | |||||
type Data_Redis struct { | |||||
state protoimpl.MessageState | |||||
sizeCache protoimpl.SizeCache | |||||
unknownFields protoimpl.UnknownFields | |||||
Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr"` | |||||
Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username"` | |||||
Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password"` | |||||
} | |||||
func (x *Data_Redis) Reset() { | |||||
*x = Data_Redis{} | |||||
if protoimpl.UnsafeEnabled { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[6] | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
} | |||||
func (x *Data_Redis) String() string { | |||||
return protoimpl.X.MessageStringOf(x) | |||||
} | |||||
func (*Data_Redis) ProtoMessage() {} | |||||
func (x *Data_Redis) ProtoReflect() protoreflect.Message { | |||||
mi := &file_server_platform_server_internal_conf_conf_proto_msgTypes[6] | |||||
if protoimpl.UnsafeEnabled && x != nil { | |||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||||
if ms.LoadMessageInfo() == nil { | |||||
ms.StoreMessageInfo(mi) | |||||
} | |||||
return ms | |||||
} | |||||
return mi.MessageOf(x) | |||||
} | |||||
// Deprecated: Use Data_Redis.ProtoReflect.Descriptor instead. | |||||
func (*Data_Redis) Descriptor() ([]byte, []int) { | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescGZIP(), []int{3, 0} | |||||
} | |||||
func (x *Data_Redis) GetAddr() string { | |||||
if x != nil { | |||||
return x.Addr | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Data_Redis) GetUsername() string { | |||||
if x != nil { | |||||
return x.Username | |||||
} | |||||
return "" | |||||
} | |||||
func (x *Data_Redis) GetPassword() string { | |||||
if x != nil { | |||||
return x.Password | |||||
} | |||||
return "" | |||||
} | |||||
var File_server_platform_server_internal_conf_conf_proto protoreflect.FileDescriptor | |||||
var file_server_platform_server_internal_conf_conf_proto_rawDesc = []byte{ | |||||
0x0a, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, | |||||
0x6d, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, | |||||
0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, | |||||
0x6f, 0x12, 0x1c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, | |||||
0x72, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x1a, | |||||
0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, | |||||
0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, | |||||
0xf7, 0x01, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x33, 0x0a, | |||||
0x03, 0x61, 0x70, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x6c, 0x61, | |||||
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x65, | |||||
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x41, 0x70, 0x70, 0x52, 0x03, 0x61, | |||||
0x70, 0x70, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, | |||||
0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, | |||||
0x76, 0x65, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, | |||||
0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, | |||||
0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, | |||||
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, | |||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x44, 0x61, | |||||
0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, | |||||
0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x6c, 0x61, 0x74, | |||||
0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, | |||||
0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, | |||||
0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x65, 0x0a, 0x03, 0x41, 0x70, 0x70, | |||||
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, | |||||
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, | |||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, | |||||
0x0a, 0x05, 0x69, 0x73, 0x44, 0x65, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, | |||||
0x73, 0x44, 0x65, 0x76, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, | |||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, | |||||
0x22, 0xd3, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x04, 0x68, | |||||
0x74, 0x74, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x6c, 0x61, 0x74, | |||||
0x66, 0x6f, 0x72, 0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, | |||||
0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, | |||||
0x48, 0x54, 0x54, 0x50, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0x89, 0x01, 0x0a, 0x04, 0x48, | |||||
0x54, 0x54, 0x50, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, | |||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, | |||||
0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, | |||||
0x72, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, | |||||
0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, | |||||
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, | |||||
0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x77, 0x74, 0x53, 0x65, 0x63, | |||||
0x72, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6a, 0x77, 0x74, 0x53, | |||||
0x65, 0x63, 0x72, 0x65, 0x63, 0x74, 0x22, 0xff, 0x01, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, | |||||
0x26, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, | |||||
0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, | |||||
0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, | |||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, | |||||
0x6d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, | |||||
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x73, | |||||
0x52, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x62, 0x61, 0x73, 0x65, 0x53, | |||||
0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, | |||||
0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x62, 0x61, 0x73, 0x65, 0x53, | |||||
0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, | |||||
0x6f, 0x75, 0x74, 0x1a, 0x53, 0x0a, 0x05, 0x52, 0x65, 0x64, 0x69, 0x73, 0x12, 0x12, 0x0a, 0x04, | |||||
0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, | |||||
0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, | |||||
0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, | |||||
0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, | |||||
0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x39, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, | |||||
0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x45, 0x78, 0x70, 0x69, | |||||
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, | |||||
0x12, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, | |||||
0x53, 0x65, 0x63, 0x42, 0x14, 0x5a, 0x12, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, | |||||
0x63, 0x6f, 0x6e, 0x66, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, | |||||
0x33, | |||||
} | |||||
var ( | |||||
file_server_platform_server_internal_conf_conf_proto_rawDescOnce sync.Once | |||||
file_server_platform_server_internal_conf_conf_proto_rawDescData = file_server_platform_server_internal_conf_conf_proto_rawDesc | |||||
) | |||||
func file_server_platform_server_internal_conf_conf_proto_rawDescGZIP() []byte { | |||||
file_server_platform_server_internal_conf_conf_proto_rawDescOnce.Do(func() { | |||||
file_server_platform_server_internal_conf_conf_proto_rawDescData = protoimpl.X.CompressGZIP(file_server_platform_server_internal_conf_conf_proto_rawDescData) | |||||
}) | |||||
return file_server_platform_server_internal_conf_conf_proto_rawDescData | |||||
} | |||||
var file_server_platform_server_internal_conf_conf_proto_msgTypes = make([]protoimpl.MessageInfo, 7) | |||||
var file_server_platform_server_internal_conf_conf_proto_goTypes = []interface{}{ | |||||
(*Bootstrap)(nil), // 0: platformserver.internal.conf.Bootstrap | |||||
(*App)(nil), // 1: platformserver.internal.conf.App | |||||
(*Server)(nil), // 2: platformserver.internal.conf.Server | |||||
(*Data)(nil), // 3: platformserver.internal.conf.Data | |||||
(*Service)(nil), // 4: platformserver.internal.conf.Service | |||||
(*Server_HTTP)(nil), // 5: platformserver.internal.conf.Server.HTTP | |||||
(*Data_Redis)(nil), // 6: platformserver.internal.conf.Data.Redis | |||||
(*durationpb.Duration)(nil), // 7: google.protobuf.Duration | |||||
} | |||||
var file_server_platform_server_internal_conf_conf_proto_depIdxs = []int32{ | |||||
1, // 0: platformserver.internal.conf.Bootstrap.app:type_name -> platformserver.internal.conf.App | |||||
2, // 1: platformserver.internal.conf.Bootstrap.server:type_name -> platformserver.internal.conf.Server | |||||
3, // 2: platformserver.internal.conf.Bootstrap.data:type_name -> platformserver.internal.conf.Data | |||||
4, // 3: platformserver.internal.conf.Bootstrap.service:type_name -> platformserver.internal.conf.Service | |||||
5, // 4: platformserver.internal.conf.Server.http:type_name -> platformserver.internal.conf.Server.HTTP | |||||
6, // 5: platformserver.internal.conf.Data.redis:type_name -> platformserver.internal.conf.Data.Redis | |||||
7, // 6: platformserver.internal.conf.Server.HTTP.timeout:type_name -> google.protobuf.Duration | |||||
7, // [7:7] is the sub-list for method output_type | |||||
7, // [7:7] is the sub-list for method input_type | |||||
7, // [7:7] is the sub-list for extension type_name | |||||
7, // [7:7] is the sub-list for extension extendee | |||||
0, // [0:7] is the sub-list for field type_name | |||||
} | |||||
func init() { file_server_platform_server_internal_conf_conf_proto_init() } | |||||
func file_server_platform_server_internal_conf_conf_proto_init() { | |||||
if File_server_platform_server_internal_conf_conf_proto != nil { | |||||
return | |||||
} | |||||
if !protoimpl.UnsafeEnabled { | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Bootstrap); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*App); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Server); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Data); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Service); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Server_HTTP); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
file_server_platform_server_internal_conf_conf_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { | |||||
switch v := v.(*Data_Redis); i { | |||||
case 0: | |||||
return &v.state | |||||
case 1: | |||||
return &v.sizeCache | |||||
case 2: | |||||
return &v.unknownFields | |||||
default: | |||||
return nil | |||||
} | |||||
} | |||||
} | |||||
type x struct{} | |||||
out := protoimpl.TypeBuilder{ | |||||
File: protoimpl.DescBuilder{ | |||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | |||||
RawDescriptor: file_server_platform_server_internal_conf_conf_proto_rawDesc, | |||||
NumEnums: 0, | |||||
NumMessages: 7, | |||||
NumExtensions: 0, | |||||
NumServices: 0, | |||||
}, | |||||
GoTypes: file_server_platform_server_internal_conf_conf_proto_goTypes, | |||||
DependencyIndexes: file_server_platform_server_internal_conf_conf_proto_depIdxs, | |||||
MessageInfos: file_server_platform_server_internal_conf_conf_proto_msgTypes, | |||||
}.Build() | |||||
File_server_platform_server_internal_conf_conf_proto = out.File | |||||
file_server_platform_server_internal_conf_conf_proto_rawDesc = nil | |||||
file_server_platform_server_internal_conf_conf_proto_goTypes = nil | |||||
file_server_platform_server_internal_conf_conf_proto_depIdxs = nil | |||||
} |
@@ -1,579 +0,0 @@ | |||||
// Code generated by protoc-gen-validate. DO NOT EDIT. | |||||
// source: server/platform-server/internal/conf/conf.proto | |||||
package conf | |||||
import ( | |||||
"bytes" | |||||
"errors" | |||||
"fmt" | |||||
"net" | |||||
"net/mail" | |||||
"net/url" | |||||
"regexp" | |||||
"strings" | |||||
"time" | |||||
"unicode/utf8" | |||||
"github.com/golang/protobuf/ptypes" | |||||
) | |||||
// ensure the imports are used | |||||
var ( | |||||
_ = bytes.MinRead | |||||
_ = errors.New("") | |||||
_ = fmt.Print | |||||
_ = utf8.UTFMax | |||||
_ = (*regexp.Regexp)(nil) | |||||
_ = (*strings.Reader)(nil) | |||||
_ = net.IPv4len | |||||
_ = time.Duration(0) | |||||
_ = (*url.URL)(nil) | |||||
_ = (*mail.Address)(nil) | |||||
_ = ptypes.DynamicAny{} | |||||
) | |||||
// Validate checks the field values on Bootstrap with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Bootstrap) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if v, ok := interface{}(m.GetApp()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return BootstrapValidationError{ | |||||
field: "App", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
if v, ok := interface{}(m.GetServer()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return BootstrapValidationError{ | |||||
field: "Server", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return BootstrapValidationError{ | |||||
field: "Data", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
if v, ok := interface{}(m.GetService()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return BootstrapValidationError{ | |||||
field: "Service", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// BootstrapValidationError is the validation error returned by | |||||
// Bootstrap.Validate if the designated constraints aren't met. | |||||
type BootstrapValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e BootstrapValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e BootstrapValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e BootstrapValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e BootstrapValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e BootstrapValidationError) ErrorName() string { return "BootstrapValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e BootstrapValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sBootstrap.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = BootstrapValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = BootstrapValidationError{} | |||||
// Validate checks the field values on App with the rules defined in the proto | |||||
// definition for this message. If any rules are violated, an error is returned. | |||||
func (m *App) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for Name | |||||
// no validation rules for Version | |||||
// no validation rules for IsDev | |||||
// no validation rules for LogLevel | |||||
return nil | |||||
} | |||||
// AppValidationError is the validation error returned by App.Validate if the | |||||
// designated constraints aren't met. | |||||
type AppValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e AppValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e AppValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e AppValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e AppValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e AppValidationError) ErrorName() string { return "AppValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e AppValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sApp.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = AppValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = AppValidationError{} | |||||
// Validate checks the field values on Server with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Server) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
if v, ok := interface{}(m.GetHttp()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return ServerValidationError{ | |||||
field: "Http", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
return nil | |||||
} | |||||
// ServerValidationError is the validation error returned by Server.Validate if | |||||
// the designated constraints aren't met. | |||||
type ServerValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e ServerValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e ServerValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e ServerValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e ServerValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e ServerValidationError) ErrorName() string { return "ServerValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e ServerValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sServer.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = ServerValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = ServerValidationError{} | |||||
// Validate checks the field values on Data with the rules defined in the proto | |||||
// definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Data) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for BaseServerAddr | |||||
if v, ok := interface{}(m.GetRedis()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return DataValidationError{ | |||||
field: "Redis", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
// no validation rules for BaseServerRequestTimeout | |||||
return nil | |||||
} | |||||
// DataValidationError is the validation error returned by Data.Validate if the | |||||
// designated constraints aren't met. | |||||
type DataValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e DataValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e DataValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e DataValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e DataValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e DataValidationError) ErrorName() string { return "DataValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e DataValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sData.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = DataValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = DataValidationError{} | |||||
// Validate checks the field values on Service with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Service) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for TokenExpirationSec | |||||
return nil | |||||
} | |||||
// ServiceValidationError is the validation error returned by Service.Validate | |||||
// if the designated constraints aren't met. | |||||
type ServiceValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e ServiceValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e ServiceValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e ServiceValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e ServiceValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e ServiceValidationError) ErrorName() string { return "ServiceValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e ServiceValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sService.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = ServiceValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = ServiceValidationError{} | |||||
// Validate checks the field values on Server_HTTP with the rules defined in | |||||
// the proto definition for this message. If any rules are violated, an error | |||||
// is returned. | |||||
func (m *Server_HTTP) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for Network | |||||
// no validation rules for Addr | |||||
if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { | |||||
if err := v.Validate(); err != nil { | |||||
return Server_HTTPValidationError{ | |||||
field: "Timeout", | |||||
reason: "embedded message failed validation", | |||||
cause: err, | |||||
} | |||||
} | |||||
} | |||||
// no validation rules for JwtSecrect | |||||
return nil | |||||
} | |||||
// Server_HTTPValidationError is the validation error returned by | |||||
// Server_HTTP.Validate if the designated constraints aren't met. | |||||
type Server_HTTPValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e Server_HTTPValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e Server_HTTPValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e Server_HTTPValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e Server_HTTPValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e Server_HTTPValidationError) ErrorName() string { return "Server_HTTPValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e Server_HTTPValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sServer_HTTP.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = Server_HTTPValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = Server_HTTPValidationError{} | |||||
// Validate checks the field values on Data_Redis with the rules defined in the | |||||
// proto definition for this message. If any rules are violated, an error is returned. | |||||
func (m *Data_Redis) Validate() error { | |||||
if m == nil { | |||||
return nil | |||||
} | |||||
// no validation rules for Addr | |||||
// no validation rules for Username | |||||
// no validation rules for Password | |||||
return nil | |||||
} | |||||
// Data_RedisValidationError is the validation error returned by | |||||
// Data_Redis.Validate if the designated constraints aren't met. | |||||
type Data_RedisValidationError struct { | |||||
field string | |||||
reason string | |||||
cause error | |||||
key bool | |||||
} | |||||
// Field function returns field value. | |||||
func (e Data_RedisValidationError) Field() string { return e.field } | |||||
// Reason function returns reason value. | |||||
func (e Data_RedisValidationError) Reason() string { return e.reason } | |||||
// Cause function returns cause value. | |||||
func (e Data_RedisValidationError) Cause() error { return e.cause } | |||||
// Key function returns key value. | |||||
func (e Data_RedisValidationError) Key() bool { return e.key } | |||||
// ErrorName returns error name. | |||||
func (e Data_RedisValidationError) ErrorName() string { return "Data_RedisValidationError" } | |||||
// Error satisfies the builtin error interface | |||||
func (e Data_RedisValidationError) Error() string { | |||||
cause := "" | |||||
if e.cause != nil { | |||||
cause = fmt.Sprintf(" | caused by: %v", e.cause) | |||||
} | |||||
key := "" | |||||
if e.key { | |||||
key = "key for " | |||||
} | |||||
return fmt.Sprintf( | |||||
"invalid %sData_Redis.%s: %s%s", | |||||
key, | |||||
e.field, | |||||
e.reason, | |||||
cause) | |||||
} | |||||
var _ error = Data_RedisValidationError{} | |||||
var _ interface { | |||||
Field() string | |||||
Reason() string | |||||
Key() bool | |||||
Cause() error | |||||
ErrorName() string | |||||
} = Data_RedisValidationError{} |
@@ -1,35 +0,0 @@ | |||||
kind: pipeline | |||||
name: pipeline-octopus-cambricon-k8s-device-plugin | |||||
platform: | |||||
os: linux | |||||
arch: amd64 | |||||
steps: | |||||
- name: containerize | |||||
image: docker:18.09.7 | |||||
volumes: | |||||
# - name: dockerlib | |||||
# path: /var/lib/docker | |||||
- name: dockersock | |||||
path: /var/run/docker.sock | |||||
- name: drone | |||||
path: /etc/drone | |||||
commands: | |||||
- export DRONE_DOCKER_LOCAL_FILE="./device-plugin/Dockerfile" | |||||
- . /etc/drone/env.sh | |||||
- . /etc/drone/docker_build.sh | |||||
trigger: | |||||
event: | |||||
- tag | |||||
volumes: | |||||
- name: dockerlib | |||||
host: | |||||
path: /var/lib/docker | |||||
- name: dockersock | |||||
host: | |||||
path: /var/run/docker.sock | |||||
- name: drone | |||||
host: | |||||
path: /etc/drone |
@@ -1,7 +0,0 @@ | |||||
_The template below is mostly useful for bug reports and support questions. Feel free to remove anything which doesn't apply to you and add more information where it makes sense._ | |||||
### 1. Issue or feature description | |||||
### 2. Steps to reproduce the issue | |||||
### 3. Information to [attach](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/) (optional if deemed irrelevant) |
@@ -1,50 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
name: Cambricon Device Plugin CI | |||||
on: | |||||
pull_request: | |||||
branches: | |||||
- master | |||||
jobs: | |||||
lint: | |||||
name: Lint | |||||
runs-on: ubuntu-18.04 | |||||
steps: | |||||
- uses: actions/checkout@v2 | |||||
- uses: golangci/golangci-lint-action@v2 | |||||
with: | |||||
version: v1.29 | |||||
working-directory: device-plugin | |||||
args: -v | |||||
build: | |||||
name: Build | |||||
runs-on: ubuntu-18.04 | |||||
steps: | |||||
- uses: actions/checkout@v2 | |||||
- uses: actions/setup-go@v1 | |||||
with: | |||||
go-version: "1.13.1" | |||||
- run: make -C device-plugin build | |||||
test: | |||||
name: Test | |||||
runs-on: ubuntu-18.04 | |||||
steps: | |||||
- uses: actions/checkout@v2 | |||||
- uses: actions/setup-go@v1 | |||||
with: | |||||
go-version: "1.13.1" | |||||
- run: make -C device-plugin test |
@@ -1,41 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
image: 10.110.210.252:5001/cambricon/buildpack:20200424 | |||||
variables: | |||||
GOPROXY: http://10.110.210.252:8080 | |||||
.only-mr-refs: &only-mr-refs | |||||
refs: | |||||
- merge_requests | |||||
- master | |||||
stages: | |||||
- lint | |||||
- build | |||||
- test | |||||
include: | |||||
- local: device-plugin/.gitlab-ci.yml | |||||
run-shellcheck-lint: | |||||
stage: lint | |||||
image: 10.110.210.252:5001/cambricon/shellcheck-alpine:v0.7.0 | |||||
script: | |||||
- find . -name '*.sh' -exec shellcheck {} + | |||||
only: | |||||
changes: | |||||
- .gitlab-ci.yml | |||||
- "**/*.sh" | |||||
<<: *only-mr-refs |
@@ -1,25 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
linters: | |||||
enable: | |||||
- govet | |||||
- gofmt | |||||
- goimports | |||||
- golint | |||||
disable-all: true | |||||
issues: | |||||
exclude-use-default: false | |||||
exclude: | |||||
- (comment on exported (method|function|type|const)|should have( a package)? comment|comment should be of the form) |
@@ -1,201 +0,0 @@ | |||||
Apache License | |||||
Version 2.0, January 2004 | |||||
http://www.apache.org/licenses/ | |||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||||
1. Definitions. | |||||
"License" shall mean the terms and conditions for use, reproduction, | |||||
and distribution as defined by Sections 1 through 9 of this document. | |||||
"Licensor" shall mean the copyright owner or entity authorized by | |||||
the copyright owner that is granting the License. | |||||
"Legal Entity" shall mean the union of the acting entity and all | |||||
other entities that control, are controlled by, or are under common | |||||
control with that entity. For the purposes of this definition, | |||||
"control" means (i) the power, direct or indirect, to cause the | |||||
direction or management of such entity, whether by contract or | |||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||||
outstanding shares, or (iii) beneficial ownership of such entity. | |||||
"You" (or "Your") shall mean an individual or Legal Entity | |||||
exercising permissions granted by this License. | |||||
"Source" form shall mean the preferred form for making modifications, | |||||
including but not limited to software source code, documentation | |||||
source, and configuration files. | |||||
"Object" form shall mean any form resulting from mechanical | |||||
transformation or translation of a Source form, including but | |||||
not limited to compiled object code, generated documentation, | |||||
and conversions to other media types. | |||||
"Work" shall mean the work of authorship, whether in Source or | |||||
Object form, made available under the License, as indicated by a | |||||
copyright notice that is included in or attached to the work | |||||
(an example is provided in the Appendix below). | |||||
"Derivative Works" shall mean any work, whether in Source or Object | |||||
form, that is based on (or derived from) the Work and for which the | |||||
editorial revisions, annotations, elaborations, or other modifications | |||||
represent, as a whole, an original work of authorship. For the purposes | |||||
of this License, Derivative Works shall not include works that remain | |||||
separable from, or merely link (or bind by name) to the interfaces of, | |||||
the Work and Derivative Works thereof. | |||||
"Contribution" shall mean any work of authorship, including | |||||
the original version of the Work and any modifications or additions | |||||
to that Work or Derivative Works thereof, that is intentionally | |||||
submitted to Licensor for inclusion in the Work by the copyright owner | |||||
or by an individual or Legal Entity authorized to submit on behalf of | |||||
the copyright owner. For the purposes of this definition, "submitted" | |||||
means any form of electronic, verbal, or written communication sent | |||||
to the Licensor or its representatives, including but not limited to | |||||
communication on electronic mailing lists, source code control systems, | |||||
and issue tracking systems that are managed by, or on behalf of, the | |||||
Licensor for the purpose of discussing and improving the Work, but | |||||
excluding communication that is conspicuously marked or otherwise | |||||
designated in writing by the copyright owner as "Not a Contribution." | |||||
"Contributor" shall mean Licensor and any individual or Legal Entity | |||||
on behalf of whom a Contribution has been received by Licensor and | |||||
subsequently incorporated within the Work. | |||||
2. Grant of Copyright License. Subject to the terms and conditions of | |||||
this License, each Contributor hereby grants to You a perpetual, | |||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||||
copyright license to reproduce, prepare Derivative Works of, | |||||
publicly display, publicly perform, sublicense, and distribute the | |||||
Work and such Derivative Works in Source or Object form. | |||||
3. Grant of Patent License. Subject to the terms and conditions of | |||||
this License, each Contributor hereby grants to You a perpetual, | |||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||||
(except as stated in this section) patent license to make, have made, | |||||
use, offer to sell, sell, import, and otherwise transfer the Work, | |||||
where such license applies only to those patent claims licensable | |||||
by such Contributor that are necessarily infringed by their | |||||
Contribution(s) alone or by combination of their Contribution(s) | |||||
with the Work to which such Contribution(s) was submitted. If You | |||||
institute patent litigation against any entity (including a | |||||
cross-claim or counterclaim in a lawsuit) alleging that the Work | |||||
or a Contribution incorporated within the Work constitutes direct | |||||
or contributory patent infringement, then any patent licenses | |||||
granted to You under this License for that Work shall terminate | |||||
as of the date such litigation is filed. | |||||
4. Redistribution. You may reproduce and distribute copies of the | |||||
Work or Derivative Works thereof in any medium, with or without | |||||
modifications, and in Source or Object form, provided that You | |||||
meet the following conditions: | |||||
(a) You must give any other recipients of the Work or | |||||
Derivative Works a copy of this License; and | |||||
(b) You must cause any modified files to carry prominent notices | |||||
stating that You changed the files; and | |||||
(c) You must retain, in the Source form of any Derivative Works | |||||
that You distribute, all copyright, patent, trademark, and | |||||
attribution notices from the Source form of the Work, | |||||
excluding those notices that do not pertain to any part of | |||||
the Derivative Works; and | |||||
(d) If the Work includes a "NOTICE" text file as part of its | |||||
distribution, then any Derivative Works that You distribute must | |||||
include a readable copy of the attribution notices contained | |||||
within such NOTICE file, excluding those notices that do not | |||||
pertain to any part of the Derivative Works, in at least one | |||||
of the following places: within a NOTICE text file distributed | |||||
as part of the Derivative Works; within the Source form or | |||||
documentation, if provided along with the Derivative Works; or, | |||||
within a display generated by the Derivative Works, if and | |||||
wherever such third-party notices normally appear. The contents | |||||
of the NOTICE file are for informational purposes only and | |||||
do not modify the License. You may add Your own attribution | |||||
notices within Derivative Works that You distribute, alongside | |||||
or as an addendum to the NOTICE text from the Work, provided | |||||
that such additional attribution notices cannot be construed | |||||
as modifying the License. | |||||
You may add Your own copyright statement to Your modifications and | |||||
may provide additional or different license terms and conditions | |||||
for use, reproduction, or distribution of Your modifications, or | |||||
for any such Derivative Works as a whole, provided Your use, | |||||
reproduction, and distribution of the Work otherwise complies with | |||||
the conditions stated in this License. | |||||
5. Submission of Contributions. Unless You explicitly state otherwise, | |||||
any Contribution intentionally submitted for inclusion in the Work | |||||
by You to the Licensor shall be under the terms and conditions of | |||||
this License, without any additional terms or conditions. | |||||
Notwithstanding the above, nothing herein shall supersede or modify | |||||
the terms of any separate license agreement you may have executed | |||||
with Licensor regarding such Contributions. | |||||
6. Trademarks. This License does not grant permission to use the trade | |||||
names, trademarks, service marks, or product names of the Licensor, | |||||
except as required for reasonable and customary use in describing the | |||||
origin of the Work and reproducing the content of the NOTICE file. | |||||
7. Disclaimer of Warranty. Unless required by applicable law or | |||||
agreed to in writing, Licensor provides the Work (and each | |||||
Contributor provides its Contributions) on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |||||
implied, including, without limitation, any warranties or conditions | |||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |||||
PARTICULAR PURPOSE. You are solely responsible for determining the | |||||
appropriateness of using or redistributing the Work and assume any | |||||
risks associated with Your exercise of permissions under this License. | |||||
8. Limitation of Liability. In no event and under no legal theory, | |||||
whether in tort (including negligence), contract, or otherwise, | |||||
unless required by applicable law (such as deliberate and grossly | |||||
negligent acts) or agreed to in writing, shall any Contributor be | |||||
liable to You for damages, including any direct, indirect, special, | |||||
incidental, or consequential damages of any character arising as a | |||||
result of this License or out of the use or inability to use the | |||||
Work (including but not limited to damages for loss of goodwill, | |||||
work stoppage, computer failure or malfunction, or any and all | |||||
other commercial damages or losses), even if such Contributor | |||||
has been advised of the possibility of such damages. | |||||
9. Accepting Warranty or Additional Liability. While redistributing | |||||
the Work or Derivative Works thereof, You may choose to offer, | |||||
and charge a fee for, acceptance of support, warranty, indemnity, | |||||
or other liability obligations and/or rights consistent with this | |||||
License. However, in accepting such obligations, You may act only | |||||
on Your own behalf and on Your sole responsibility, not on behalf | |||||
of any other Contributor, and only if You agree to indemnify, | |||||
defend, and hold each Contributor harmless for any liability | |||||
incurred by, or claims asserted against, such Contributor by reason | |||||
of your accepting any such warranty or additional liability. | |||||
END OF TERMS AND CONDITIONS | |||||
APPENDIX: How to apply the Apache License to your work. | |||||
To apply the Apache License to your work, attach the following | |||||
boilerplate notice, with the fields enclosed by brackets "[]" | |||||
replaced with your own identifying information. (Don't include | |||||
the brackets!) The text should be enclosed in the appropriate | |||||
comment syntax for the file format. We also recommend that a | |||||
file or class name and description of purpose be included on the | |||||
same "printed page" as the copyright notice for easier | |||||
identification within third-party archives. | |||||
Copyright [yyyy] [name of copyright owner] | |||||
Licensed under the Apache License, Version 2.0 (the "License"); | |||||
you may not use this file except in compliance with the License. | |||||
You may obtain a copy of the License at | |||||
http://www.apache.org/licenses/LICENSE-2.0 | |||||
Unless required by applicable law or agreed to in writing, software | |||||
distributed under the License is distributed on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
See the License for the specific language governing permissions and | |||||
limitations under the License. |
@@ -1,7 +0,0 @@ | |||||
# Cambricon K8s Device Plugin | |||||
See [device-plugin](device-plugin) directory. | |||||
## License | |||||
[Apache-2.0](LICENSE) |
@@ -1,5 +0,0 @@ | |||||
libcndev.so | |||||
k8s-device-plugin | |||||
mock_test | |||||
image | |||||
*.tar* |
@@ -1,50 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
.run-device-plugin-mr: | |||||
only: | |||||
changes: | |||||
- .gitlab-ci.yml | |||||
- .golangci.yml | |||||
- device-plugin/**/* | |||||
refs: | |||||
- merge_requests | |||||
run-device-plugin-lint: | |||||
extends: .run-device-plugin-mr | |||||
stage: lint | |||||
script: | |||||
- make -C device-plugin lint | |||||
run-device-plugin-build: | |||||
extends: .run-device-plugin-mr | |||||
stage: build | |||||
script: | |||||
- make -C device-plugin build | |||||
run-device-plugin-test: | |||||
extends: .run-device-plugin-mr | |||||
stage: test | |||||
script: | |||||
- make -C device-plugin test | |||||
run-device-plugin-integration: | |||||
extends: .run-device-plugin-mr | |||||
variables: | |||||
APT_PROXY: http://10.110.210.252:3142 | |||||
stage: test | |||||
tags: | |||||
- shell47 | |||||
script: | |||||
- make -C device-plugin integration-test |
@@ -1,14 +0,0 @@ | |||||
# Changelog | |||||
## v1.0.0 | |||||
+ Implement basic function. | |||||
## v1.1.0 | |||||
+ Implement SR-IOV and env-share features. | |||||
## v1.1.1 | |||||
+ Fix SR-IOV vf device name same as env-share fake device name. | |||||
+ Support building image on arm64 machines. |
@@ -1,31 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
ARG BUILDPLATFORM=linux/amd64 | |||||
FROM --platform=$BUILDPLATFORM golang:1.13 as build | |||||
ARG APT_PROXY | |||||
ARG GOPROXY=https://goproxy.cn | |||||
ARG TARGETPLATFORM | |||||
RUN set -ex && export http_proxy=$APT_PROXY && \ | |||||
apt-get update && \ | |||||
apt-get install -y build-essential gcc-aarch64-linux-gnu ca-certificates make | |||||
WORKDIR /work/ | |||||
COPY ./device-plugin . | |||||
RUN make build | |||||
FROM ubuntu:18.04 | |||||
ARG TARGETPLATFORM=linux/amd64 | |||||
COPY --from=build /work/k8s-device-plugin /usr/bin/ | |||||
COPY ./device-plugin/libs/$TARGETPLATFORM/libcndev.so /usr/lib | |||||
CMD ["/usr/bin/k8s-device-plugin"] |
@@ -1,58 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
TARGETPLATFORM ?= linux/amd64 | |||||
export GOOS := $(word 1, $(subst /, ,$(TARGETPLATFORM))) | |||||
export GOARCH := $(word 2, $(subst /, ,$(TARGETPLATFORM))) | |||||
export CGO_ENABLED := 1 | |||||
ifeq ($(GOARCH), arm64) | |||||
export CC=aarch64-linux-gnu-gcc | |||||
endif | |||||
lint: | |||||
golangci-lint run -v | |||||
build: | |||||
go build -trimpath -ldflags="-s -w" -o k8s-device-plugin . | |||||
test: go-test mock-test | |||||
go-test: pkg/cndev/mock/libcndev.so | |||||
LD_LIBRARY_PATH=$(CURDIR)/pkg/cndev/mock \ | |||||
MOCK_JSON=$(CURDIR)/test/mockmlu270.json \ | |||||
go test -v ./... | |||||
integration-test: pkg/cndev/mock/libcndev.so | |||||
./test/device-plugin-integration-test.sh | |||||
LIBCNDEV_MOCK_DEPS := $(wildcard pkg/cndev/mock/*.h pkg/cndev/mock/*.c pkg/cndev/include/*) | |||||
pkg/cndev/mock/libcndev.so: $(LIBCNDEV_MOCK_DEPS) | |||||
$(CC) -fPIC -shared pkg/cndev/mock/cJSON.c pkg/cndev/mock/cndev.c -lm -o $@ | |||||
pkg/cndev/mock/mock_test: pkg/cndev/mock/main.c pkg/cndev/mock/libcndev.so | |||||
$(CC) pkg/cndev/mock/main.c \ | |||||
-Wl,-rpath='$$ORIGIN' -Lpkg/cndev/mock -lcndev \ | |||||
-o pkg/cndev/mock/mock_test | |||||
mock-test: pkg/cndev/mock/mock_test | |||||
MOCK_JSON=$(CURDIR)/test/mockmlu270.json ./pkg/cndev/mock/mock_test | |||||
addlicense: | |||||
# install with `go get github.com/google/addlicense` | |||||
addlicense -c 'Cambricon, Inc.' -l apache -v . | |||||
clean: | |||||
rm -f pkg/cndev/mock/libcndev.so | |||||
rm -f pkg/cndev/mock/mock_test | |||||
rm -f k8s-device-plugin |
@@ -1,120 +0,0 @@ | |||||
# Cambricon Device Plugin for Kubernetes | |||||
## 说明 | |||||
无官方docker镜像,原项目地址https://github.com/Cambricon/cambricon-k8s-device-plugin,修改了编译脚本 | |||||
## About Cambricon Device Plugin | |||||
The Cambricon device plugin for Kubernetes is a Daemonset which allows you to automatically: | |||||
- Report the quantity of MLU on each nodes of your cluster. | |||||
- Monitor the health status of MLUs. | |||||
- Be capable to run containers with MLU enabled. | |||||
This repository contains Cambricon's official implementation of the Kubernetes device plugin. | |||||
## Prerequisites | |||||
The prerequisites for running the Cambricon device plugin: | |||||
- MLU100, MLU270, x5k, MLU220 devices | |||||
- MLU100 driver > 3.5; MLU270 driver >2.2.0; MLU220 driver > 4.1.1 | |||||
- libcndev.so >= V1.8.0 | |||||
- Kubernetes >= v1.11.2 | |||||
## Quick Start | |||||
### Preparing your MLU Nodes | |||||
It assumes that the Cambricon drivers and neuware are installed on your MLU Nodes. | |||||
### Download and build | |||||
```shell | |||||
git clone https://github.com/Cambricon/cambricon-k8s-device-plugin.git | |||||
cd cambricon-k8s-device-plugin/device-plugin | |||||
``` | |||||
Set the following environment variables if you need. | |||||
| env | description | | |||||
| --------- | ----------------------------------------------------------------------------- | | |||||
| APT_PROXY | apt proxy server | | |||||
| GOPROXY | golang proxy server | | |||||
| ARCH | target platform architecture, amd64 or arm64, amd64 by default | | |||||
| LIBCNDEV | absolute path of the libcndev.so binary, neuware installation path by default | | |||||
If you want to cross build, make sure docker version >= 19.03. | |||||
For amd64: | |||||
```shell | |||||
./build_image.sh | |||||
``` | |||||
For arm64: | |||||
```shell | |||||
export ARCH=arm64 | |||||
./build_image.sh | |||||
``` | |||||
Please make sure Cambricon neuware is installed in your compiling environment. | |||||
It uses **libcndev.so** binary on your compiling machine and generates docker image in folder `./image`. | |||||
### Enabling MLU Support in Kubernetes | |||||
1. Push the docker image to the docker repo of your cluster or load the docker image on all your MLU nodes by: | |||||
```shell | |||||
docker load -i image/cambricon-k8s-device-plugin-amd64.tar | |||||
``` | |||||
2. Enable MLU support in your cluster by deploying the daemonset in [examples](examples) folder: | |||||
Set the mode arg in the yaml file to change mode | |||||
```yaml | |||||
args: | |||||
- -mode | |||||
- default # switch mode here | |||||
env: | |||||
# change this if env-share mode or sriov mode is enabled. | |||||
- name: VIRTUALIZATION_NUM | |||||
value: "0" | |||||
``` | |||||
supported features: | |||||
- default: default mode | |||||
- sriov: supports SR-IOV. Set `VIRTUALIZATION_NUM` as number of VFs on host. | |||||
- env-share: a whole card can be allocated into multiple containers. A container should use only one card in this mode. | |||||
Set `VIRTUALIZATION_NUM` as maximum number of containers one MLU can be allocated into. | |||||
```shell | |||||
kubectl create -f cambricon-device-plugin-daemonset.yml | |||||
``` | |||||
(Optional) If you do not want the daemonset way of deployment, edit the static pod template in examples folder and | |||||
put the file into your configured static pod folder (`/etc/kubernetes/manifests` by default). | |||||
### Running MLU Jobs | |||||
Cambricon MLUs can now be consumed via container level resource requirements using the resource name `cambricon.com/mlu`: | |||||
```yaml | |||||
apiVersion: v1 | |||||
kind: Pod | |||||
metadata: | |||||
name: pod1 | |||||
spec: | |||||
restartPolicy: OnFailure | |||||
containers: | |||||
- image: ubuntu:16.04 | |||||
name: pod1-ctr | |||||
command: ["sleep"] | |||||
args: ["100000"] | |||||
resources: | |||||
limits: | |||||
cambricon.com/mlu: 1 | |||||
``` |
@@ -1,93 +0,0 @@ | |||||
#!/bin/bash | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
curpath=$(dirname "$0") | |||||
cd "$curpath" || exit 1 | |||||
: "${TAG:=v1.1.1}" | |||||
: "${ARCH:=amd64}" | |||||
: "${LIBCNDEV:=/usr/local/neuware/lib64/libcndev.so}" | |||||
echo "Build environ (Can be overridden):" | |||||
echo "TAG = $TAG" | |||||
echo "ARCH = $ARCH" | |||||
echo "LIBCNDEV = $LIBCNDEV" | |||||
echo "APT_PROXY = $APT_PROXY" | |||||
echo "GOPROXY = $GOPROXY" | |||||
case $(uname -m) in | |||||
x86_64) | |||||
build_arch=amd64 | |||||
;; | |||||
aarch64*) | |||||
build_arch=arm64 | |||||
;; | |||||
armv8*) | |||||
build_arch=arm64 | |||||
esac | |||||
rm -rf "$curpath/image" | |||||
mkdir -p "$curpath/image" | |||||
# Cambricon neuware installation path | |||||
if [[ ! -f "$LIBCNDEV" ]]; then | |||||
echo "Can't find libcndev.so at $LIBCNDEV." | |||||
echo "Please install Cambricon neuware, or set LIBCNDEV environ to path of libcndev.so" | |||||
exit 1 | |||||
fi | |||||
case $ARCH in | |||||
amd64) | |||||
file_arch=x86-64 | |||||
;; | |||||
arm64) | |||||
file_arch=aarch64 | |||||
;; | |||||
*) | |||||
echo "Unknown arch $ARCH" | |||||
exit 1 | |||||
esac | |||||
if ! file "$LIBCNDEV" --dereference | grep -q "$file_arch"; then | |||||
echo "$LIBCNDEV is not for $ARCH" | |||||
exit 1 | |||||
fi | |||||
cp "$LIBCNDEV" "$curpath/libs/linux/$ARCH/" | |||||
echo "Building Cambricon device plugin docker image." | |||||
# Legacy build for docker 18.06. | |||||
# Remove this when docker is upgraded to 19.03 in all environ. | |||||
[[ "$ARCH" == "$build_arch" ]] && docker build -t "cambricon-k8s-device-plugin:$TAG" \ | |||||
--build-arg "GOPROXY=$GOPROXY" --build-arg "APT_PROXY=$APT_PROXY" \ | |||||
--build-arg "BUILDPLATFORM=linux/$ARCH" \ | |||||
--build-arg "TARGETPLATFORM=linux/$ARCH" . | |||||
[[ "$ARCH" == "$build_arch" ]] && docker save -o "image/cambricon-k8s-device-plugin-$ARCH.tar" \ | |||||
"cambricon-k8s-device-plugin:$TAG" | |||||
if [[ "$ARCH" != "$build_arch" && "$(docker version -f '{{ge .Client.Version "19.03"}}')" != "true" ]]; then | |||||
echo "Needs docker 19.03 and above" | |||||
exit 1 | |||||
fi | |||||
[[ "$ARCH" != "$build_arch" ]] && DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build \ | |||||
--platform="linux/$ARCH" -t "cambricon-k8s-device-plugin:$TAG" \ | |||||
--build-arg "GOPROXY=$GOPROXY" --build-arg "APT_PROXY=$APT_PROXY" \ | |||||
--output type=docker,dest="./image/cambricon-k8s-device-plugin-$ARCH.tar" . | |||||
echo "Image is saved at ./image/cambricon-k8s-device-plugin-$ARCH.tar" | |||||
rm -f "$curpath/libs/linux/$ARCH/libcndev.so" |
@@ -1,198 +0,0 @@ | |||||
// Copyright 2020 Cambricon, Inc. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package main | |||||
import ( | |||||
"fmt" | |||||
"log" | |||||
"os" | |||||
"path/filepath" | |||||
"strconv" | |||||
"time" | |||||
"github.com/cambricon/cambricon-k8s-device-plugin/device-plugin/pkg/cndev" | |||||
"golang.org/x/net/context" | |||||
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" | |||||
) | |||||
const ( | |||||
mlu100MonitorDeviceName = "/dev/cnmon_dev" | |||||
mlu100CodecDeviceName = "/dev/cncodec_dev" | |||||
mlu100DeviceName = "/dev/cambricon_c10Dev" | |||||
mluMonitorDeviceName = "/dev/cambricon_ctl" | |||||
mluMsgqDeviceName = "/dev/cambr-msgq" | |||||
mluRPCDeviceName = "/dev/cambr-rpc" | |||||
mluCmsgDeviceName = "/dev/cmsg_ctrl" | |||||
mluDeviceName = "/dev/cambricon_dev" | |||||
mluCommuDeviceName = "/dev/commu" | |||||
VirtualizationNum = "VIRTUALIZATION_NUM" | |||||
) | |||||
type deviceList struct { | |||||
hasCnmonDev bool | |||||
hasCodecDev bool | |||||
hasC10Dev bool | |||||
hasCtrlDev bool | |||||
hasMsgqDev bool | |||||
hasRPCDev bool | |||||
hasCmsgDev bool | |||||
hasCommuDev bool | |||||
} | |||||
func newDeviceList() *deviceList { | |||||
return &deviceList{ | |||||
hasCnmonDev: hostDeviceExistsWithPrefix(mlu100MonitorDeviceName), | |||||
hasCodecDev: hostDeviceExistsWithPrefix(mlu100CodecDeviceName), | |||||
hasC10Dev: hostDeviceExistsWithPrefix(mlu100DeviceName), | |||||
hasCtrlDev: hostDeviceExistsWithPrefix(mluMonitorDeviceName), | |||||
hasMsgqDev: hostDeviceExistsWithPrefix(mluMsgqDeviceName), | |||||
hasRPCDev: hostDeviceExistsWithPrefix(mluRPCDeviceName), | |||||
hasCmsgDev: hostDeviceExistsWithPrefix(mluCmsgDeviceName), | |||||
hasCommuDev: hostDeviceExistsWithPrefix(mluCommuDeviceName), | |||||
} | |||||
} | |||||
func hostDeviceExistsWithPrefix(prefix string) bool { | |||||
matches, err := filepath.Glob(prefix + "*") | |||||
if err != nil { | |||||
log.Printf("failed to know if host device with prefix exists, err: %v \n", err) | |||||
return false | |||||
} | |||||
return len(matches) > 0 | |||||
} | |||||
func check(err error) { | |||||
if err != nil { | |||||
log.Panicln("Fatal:", err) | |||||
} | |||||
} | |||||
func generateFakeDevs(origin *cndev.Device, num int, sriovEnabled bool) ([]*pluginapi.Device, []*cndev.Device) { | |||||
var devs []*pluginapi.Device | |||||
var devsInfo []*cndev.Device | |||||
var uuid string | |||||
path := origin.Path | |||||
for i := 0; i < num; i++ { | |||||
if sriovEnabled { | |||||
path = fmt.Sprintf("%svf%d", origin.Path, i+1) | |||||
uuid = fmt.Sprintf("%s--fake--%d", origin.UUID, i+1) | |||||
} else { | |||||
uuid = fmt.Sprintf("%s-_-%d", origin.UUID, i+1) | |||||
} | |||||
devsInfo = append(devsInfo, &cndev.Device{ | |||||
Slot: origin.Slot, | |||||
UUID: uuid, | |||||
Path: path, | |||||
}) | |||||
devs = append(devs, &pluginapi.Device{ | |||||
ID: uuid, | |||||
Health: pluginapi.Healthy, | |||||
}) | |||||
} | |||||
return devs, devsInfo | |||||
} | |||||
func getDevices(feature int) ([]*pluginapi.Device, []*cndev.Device) { | |||||
var devs []*pluginapi.Device | |||||
var devsInfo []*cndev.Device | |||||
num, err := cndev.GetDeviceCount() | |||||
check(err) | |||||
fakeNum := 0 | |||||
if feature == sriovShare || feature == envShare { | |||||
fakeNum, err = getVirtualizationNum() | |||||
check(err) | |||||
} | |||||
for i := uint(0); i < num; i++ { | |||||
d, err := cndev.NewDeviceLite(i, feature == sriovShare) | |||||
check(err) | |||||
switch feature { | |||||
case envShare: | |||||
devices, infos := generateFakeDevs(d, fakeNum, false) | |||||
devs = append(devs, devices...) | |||||
devsInfo = append(devsInfo, infos...) | |||||
case sriovShare: | |||||
err = d.EnableSriov(fakeNum) | |||||
check(err) | |||||
devices, infos := generateFakeDevs(d, fakeNum, true) | |||||
devs = append(devs, devices...) | |||||
devsInfo = append(devsInfo, infos...) | |||||
default: | |||||
devsInfo = append(devsInfo, d) | |||||
devs = append(devs, &pluginapi.Device{ | |||||
ID: d.UUID, | |||||
Health: pluginapi.Healthy, | |||||
}) | |||||
} | |||||
} | |||||
return devs, devsInfo | |||||
} | |||||
func deviceExists(devs []*pluginapi.Device, id string) bool { | |||||
for _, d := range devs { | |||||
if d.ID == id { | |||||
return true | |||||
} | |||||
} | |||||
return false | |||||
} | |||||
func watchUnhealthy(ctx context.Context, devs []*pluginapi.Device, devsInfo []*cndev.Device, unhealthy chan<- *pluginapi.Device) { | |||||
healthCheck := true | |||||
for { | |||||
select { | |||||
case <-ctx.Done(): | |||||
return | |||||
default: | |||||
} | |||||
if healthCheck { | |||||
for _, dm := range devsInfo { | |||||
ret, err := dm.GetGeviceHealthState(1) | |||||
if err != nil { | |||||
healthCheck = false | |||||
log.Printf("Failed to get Device %s healthy status, stop the healthy check", dm.UUID) | |||||
} | |||||
if ret == 0 { | |||||
for _, d := range devs { | |||||
if d.ID == dm.UUID { | |||||
log.Printf("Unhealthy device :%s\n", d.ID) | |||||
unhealthy <- d | |||||
break | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
//Sleep 1 second between two health checks | |||||
time.Sleep(time.Second) | |||||
} | |||||
} | |||||
func getVirtualizationNum() (int, error) { | |||||
s := os.Getenv(VirtualizationNum) | |||||
num, err := strconv.Atoi(s) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
if num < 1 { | |||||
return 0, fmt.Errorf("num %d should be larger than 0", num) | |||||
} | |||||
return num, nil | |||||
} |
@@ -1,98 +0,0 @@ | |||||
// Copyright 2020 Cambricon, Inc. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package main | |||||
import ( | |||||
"fmt" | |||||
"log" | |||||
"os" | |||||
"testing" | |||||
"github.com/cambricon/cambricon-k8s-device-plugin/device-plugin/pkg/cndev" | |||||
"github.com/stretchr/testify/assert" | |||||
) | |||||
func TestMain(m *testing.M) { | |||||
err := cndev.Init() | |||||
if err != nil { | |||||
log.Fatal(err) | |||||
} | |||||
ret := m.Run() | |||||
if ret != 0 { | |||||
os.Exit(ret) | |||||
} | |||||
err = cndev.Release() | |||||
if err != nil { | |||||
log.Fatal(err) | |||||
} | |||||
} | |||||
func TestGetDevices(t *testing.T) { | |||||
devs, devsInfo := getDevices(0) | |||||
assert.Equal(t, 8, len(devs)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x", 2701114), devs[3].ID) | |||||
assert.Equal(t, 8, len(devsInfo)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x", 2701114), devsInfo[3].UUID) | |||||
assert.Equal(t, uint(3), devsInfo[3].Slot) | |||||
assert.Equal(t, "/dev/cambricon_dev3", devsInfo[3].Path) | |||||
err := os.Setenv(VirtualizationNum, "2") | |||||
assert.NoError(t, err) | |||||
devs, devsInfo = getDevices(envShare) | |||||
assert.Equal(t, 16, len(devs)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x-_-2", 2701112), devs[3].ID) | |||||
assert.Equal(t, 16, len(devsInfo)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x-_-2", 2701112), devsInfo[3].UUID) | |||||
assert.Equal(t, uint(1), devsInfo[3].Slot) | |||||
assert.Equal(t, "/dev/cambricon_dev1", devsInfo[3].Path) | |||||
err = os.Unsetenv(VirtualizationNum) | |||||
assert.NoError(t, err) | |||||
} | |||||
func TestGenerateFakeDevs(t *testing.T) { | |||||
d := &cndev.Device{ | |||||
Slot: 1, | |||||
UUID: fmt.Sprintf("MLU-%x", 2701112), | |||||
Path: "/dev/cambricon_dev1", | |||||
} | |||||
devs, devsInfo := generateFakeDevs(d, 4, true) | |||||
assert.Equal(t, 4, len(devs)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x--fake--4", 2701112), devs[3].ID) | |||||
assert.Equal(t, 4, len(devsInfo)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x--fake--4", 2701112), devsInfo[3].UUID) | |||||
assert.Equal(t, "/dev/cambricon_dev1vf4", devsInfo[3].Path) | |||||
assert.Equal(t, uint(1), devsInfo[3].Slot) | |||||
devs, devsInfo = generateFakeDevs(d, 2, false) | |||||
assert.Equal(t, 2, len(devs)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x-_-2", 2701112), devs[1].ID) | |||||
assert.Equal(t, 2, len(devsInfo)) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x-_-2", 2701112), devsInfo[1].UUID) | |||||
assert.Equal(t, "/dev/cambricon_dev1", devsInfo[1].Path) | |||||
assert.Equal(t, uint(1), devsInfo[1].Slot) | |||||
} | |||||
func TestHostDeviceExistsWithPrefix(t *testing.T) { | |||||
filename := "/tmp/cambricon_dev0" | |||||
prefix := "/tmp/cambricon_dev" | |||||
_, err := os.Create(filename) | |||||
assert.NoError(t, err) | |||||
res := hostDeviceExistsWithPrefix(prefix) | |||||
assert.Equal(t, res, true) | |||||
err = os.Remove(filename) | |||||
assert.NoError(t, err) | |||||
res = hostDeviceExistsWithPrefix(prefix) | |||||
assert.Equal(t, res, false) | |||||
} |
@@ -1,34 +0,0 @@ | |||||
#!/bin/bash | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
set -e | |||||
usage() { | |||||
echo "Usage:" | |||||
echo "$0 TAG" | |||||
exit 0 | |||||
} | |||||
tag=$1 | |||||
[[ $tag == "" ]] && usage | |||||
rm -rf image | |||||
mkdir -p image | |||||
TAG=$tag ./build_image.sh | |||||
sed "s|v[0-9]\.[0-9].[0-9]|$tag|g" examples/cambricon-device-plugin-daemonset.yaml > image/cambricon-device-plugin-daemonset.yaml | |||||
sed "s|v[0-9]\.[0-9].[0-9]|$tag|g" examples/cambricon-device-plugin-static-pod.yaml > image/cambricon-device-plugin-static-pod.yaml | |||||
cp examples/pod.yaml image/ | |||||
tar -zcvf cambricon_k8s_device_plugin_packages_"$tag".tar.gz image |
@@ -1,48 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
apiVersion: v1 | |||||
kind: Pod | |||||
metadata: | |||||
name: cambricon-device-plugin-static-pod | |||||
namespace: kube-system | |||||
spec: | |||||
containers: | |||||
- image: cambricon-k8s-device-plugin:v1.1.1 | |||||
name: cambricon-device-plugin-ctr | |||||
command: | |||||
- /usr/bin/k8s-device-plugin | |||||
args: | |||||
- -mode | |||||
- default # switch mode here | |||||
env: | |||||
# change this if env-share mode or sriov mode is enabled. | |||||
- name: VIRTUALIZATION_NUM | |||||
value: "0" | |||||
securityContext: | |||||
privileged: true | |||||
volumeMounts: | |||||
- name: device-plugin | |||||
mountPath: /var/lib/kubelet/device-plugins | |||||
# mount sys if sriov mode is enabled | |||||
- name: sys | |||||
mountPath: /sys | |||||
volumes: | |||||
- name: device-plugin | |||||
hostPath: | |||||
path: /var/lib/kubelet/device-plugins | |||||
# mount sys if sriov mode is enabled | |||||
- name: sys | |||||
hostPath: | |||||
path: /sys |
@@ -1,38 +0,0 @@ | |||||
# Copyright 2020 Cambricon, Inc. | |||||
# | |||||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||||
# you may not use this file except in compliance with the License. | |||||
# You may obtain a copy of the License at | |||||
# | |||||
# http://www.apache.org/licenses/LICENSE-2.0 | |||||
# | |||||
# Unless required by applicable law or agreed to in writing, software | |||||
# distributed under the License is distributed on an "AS IS" BASIS, | |||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
# See the License for the specific language governing permissions and | |||||
# limitations under the License. | |||||
apiVersion: apps/v1 | |||||
kind: Deployment | |||||
metadata: | |||||
name: binpack-n1 | |||||
labels: | |||||
app: binpack-n1 | |||||
spec: | |||||
replicas: 1 | |||||
selector: # define how the deployment finds the pods it mangages | |||||
matchLabels: | |||||
app: binpack-1 | |||||
template: # define the pods specifications | |||||
metadata: | |||||
labels: | |||||
app: binpack-1 | |||||
spec: | |||||
containers: | |||||
- name: binpack-1 | |||||
image: ubuntu:18.04 | |||||
command: ["sleep"] | |||||
args: ["100000"] | |||||
resources: | |||||
limits: | |||||
cambricon.com/mlu: 1 |
@@ -1,11 +0,0 @@ | |||||
module github.com/cambricon/cambricon-k8s-device-plugin/device-plugin | |||||
go 1.13 | |||||
require ( | |||||
github.com/fsnotify/fsnotify v1.4.9 | |||||
github.com/stretchr/testify v1.4.0 | |||||
golang.org/x/net v0.0.0-20200822124328-c89045814202 | |||||
google.golang.org/grpc v1.31.1 | |||||
k8s.io/kubelet v0.19.0 | |||||
) |
@@ -1,373 +0,0 @@ | |||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | |||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | |||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= | |||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= | |||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= | |||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= | |||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= | |||||
cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= | |||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | |||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= | |||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= | |||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= | |||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | |||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= | |||||
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= | |||||
github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= | |||||
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= | |||||
github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= | |||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= | |||||
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= | |||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | |||||
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | |||||
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= | |||||
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= | |||||
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= | |||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | |||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | |||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= | |||||
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | |||||
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | |||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | |||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | |||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | |||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | |||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= | |||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= | |||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | |||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= | |||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= | |||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | |||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= | |||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= | |||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= | |||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | |||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | |||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | |||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | |||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= | |||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= | |||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= | |||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | |||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | |||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | |||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= | |||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | |||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | |||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | |||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= | |||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | |||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | |||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= | |||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | |||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | |||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | |||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | |||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= | |||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= | |||||
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= | |||||
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= | |||||
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= | |||||
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= | |||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | |||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | |||||
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= | |||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= | |||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | |||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | |||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | |||||
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= | |||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | |||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | |||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | |||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= | |||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= | |||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= | |||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= | |||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= | |||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= | |||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= | |||||
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= | |||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | |||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | |||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | |||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | |||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | |||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | |||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= | |||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | |||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | |||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | |||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | |||||
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | |||||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | |||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | |||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | |||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | |||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | |||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= | |||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= | |||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | |||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | |||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | |||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | |||||
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= | |||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | |||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | |||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | |||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= | |||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | |||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= | |||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | |||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | |||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | |||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | |||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | |||||
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= | |||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | |||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | |||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= | |||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | |||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | |||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= | |||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= | |||||
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= | |||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | |||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | |||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | |||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | |||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | |||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | |||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= | |||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | |||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | |||||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | |||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | |||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | |||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= | |||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | |||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | |||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | |||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= | |||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= | |||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= | |||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | |||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | |||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | |||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | |||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= | |||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | |||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= | |||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | |||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | |||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | |||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | |||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= | |||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | |||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | |||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | |||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | |||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | |||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | |||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= | |||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | |||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= | |||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= | |||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | |||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | |||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= | |||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | |||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | |||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | |||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | |||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | |||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | |||||
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= | |||||
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | |||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | |||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | |||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | |||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= | |||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | |||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | |||||
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | |||||
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | |||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= | |||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= | |||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= | |||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= | |||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= | |||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= | |||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |||||
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | |||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | |||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | |||||
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= | |||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | |||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | |||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= | |||||
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | |||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | |||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | |||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= | |||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | |||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |||||
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | |||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | |||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | |||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | |||||
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | |||||
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | |||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | |||||
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | |||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | |||||
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | |||||
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | |||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |||||
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | |||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= | |||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | |||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= | |||||
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= | |||||
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= | |||||
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= | |||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | |||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | |||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | |||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= | |||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= | |||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= | |||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | |||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | |||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | |||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | |||||
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= | |||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= | |||||
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= | |||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | |||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= | |||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= | |||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | |||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= | |||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= | |||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= | |||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= | |||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= | |||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= | |||||
google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= | |||||
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | |||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | |||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= | |||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= | |||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= | |||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= | |||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= | |||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= | |||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= | |||||
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= | |||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= | |||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | |||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= | |||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= | |||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | |||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | |||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | |||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |||||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= | |||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= | |||||
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= | |||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | |||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | |||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | |||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | |||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | |||||
k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= | |||||
k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= | |||||
k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= | |||||
k8s.io/component-base v0.19.0/go.mod h1:dKsY8BxkA+9dZIAh2aWJLL/UdASFDNtGYTCItL4LM7Y= | |||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= | |||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= | |||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= | |||||
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= | |||||
k8s.io/kubelet v0.19.0 h1:1x+ZC2o7rRKy+bMen5u3PpBdterOck7i4EpZUM3zDfE= | |||||
k8s.io/kubelet v0.19.0/go.mod h1:cGds22piF/LnFzfAaIT+efvOYBHVYdunqka6NVuNw9g= | |||||
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= | |||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | |||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= | |||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | |||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |
@@ -1,135 +0,0 @@ | |||||
// Copyright 2020 Cambricon, Inc. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package main | |||||
import ( | |||||
"flag" | |||||
"log" | |||||
"os" | |||||
"os/signal" | |||||
"syscall" | |||||
"github.com/cambricon/cambricon-k8s-device-plugin/device-plugin/pkg/cndev" | |||||
"github.com/fsnotify/fsnotify" | |||||
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" | |||||
) | |||||
const ( | |||||
sriovShare int = iota + 1 | |||||
envShare | |||||
) | |||||
var mode = flag.String("mode", "default", | |||||
`default: default version; mode number 0. | |||||
sriov: MLU is divided into VFs by SR-IOV on host machine; mode number 1. | |||||
env-share: A whole MLU can be allocated to multiple containers; A container can only use one MLU. mode number 2. | |||||
`) | |||||
func main() { | |||||
flag.Parse() | |||||
log.Println("Loading CNDEV") | |||||
if err := cndev.Init(); err != nil { | |||||
log.Printf("Failed to initialize CNDEV: %s.", err) | |||||
select {} | |||||
} | |||||
defer func() { log.Println("Shutdown of CNDEV returned:", cndev.Release()) }() | |||||
log.Println("Fetching devices.") | |||||
n, err := cndev.GetDeviceCount() | |||||
check(err) | |||||
if n == 0 { | |||||
log.Println("No devices found. Waiting indefinitely.") | |||||
select {} | |||||
} | |||||
log.Println("Starting FS watcher.") | |||||
watcher, err := startFSWatcher(pluginapi.DevicePluginPath) | |||||
if err != nil { | |||||
log.Println("Failed to created FS watcher.") | |||||
os.Exit(1) | |||||
} | |||||
defer watcher.Close() | |||||
log.Println("Starting OS watcher.") | |||||
sigs := startOSWatcher(syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) | |||||
restart := true | |||||
var devicePlugin *CambriconDevicePlugin | |||||
L: | |||||
for { | |||||
if restart { | |||||
if devicePlugin != nil { | |||||
devicePlugin.Stop() | |||||
} | |||||
devicePlugin = NewCambriconDevicePlugin() | |||||
if err := devicePlugin.Serve(); err != nil { | |||||
log.Println("Could not contact Kubelet, retrying. Did you enable the device plugin feature gate?") | |||||
} else { | |||||
restart = false | |||||
} | |||||
} | |||||
select { | |||||
case event := <-watcher.Events: | |||||
if event.Name == pluginapi.KubeletSocket && event.Op&fsnotify.Create == fsnotify.Create { | |||||
log.Printf("inotify: %s created, restarting.", pluginapi.KubeletSocket) | |||||
restart = true | |||||
} | |||||
case err := <-watcher.Errors: | |||||
log.Printf("inotify: %s", err) | |||||
case s := <-sigs: | |||||
switch s { | |||||
case syscall.SIGHUP: | |||||
log.Println("Received SIGHUP, restarting.") | |||||
restart = true | |||||
default: | |||||
log.Printf("Received signal \"%v\", shutting down.", s) | |||||
devicePlugin.Stop() | |||||
break L | |||||
} | |||||
} | |||||
} | |||||
} | |||||
func startFSWatcher(files ...string) (*fsnotify.Watcher, error) { | |||||
watcher, err := fsnotify.NewWatcher() | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
for _, f := range files { | |||||
err = watcher.Add(f) | |||||
if err != nil { | |||||
watcher.Close() | |||||
return nil, err | |||||
} | |||||
} | |||||
return watcher, nil | |||||
} | |||||
func startOSWatcher(sigs ...os.Signal) chan os.Signal { | |||||
sigChan := make(chan os.Signal, 1) | |||||
signal.Notify(sigChan, sigs...) | |||||
return sigChan | |||||
} |
@@ -1,112 +0,0 @@ | |||||
// Copyright 2020 Cambricon, Inc. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package cndev | |||||
// #cgo LDFLAGS: -ldl | |||||
// #include "include/cndev.h" | |||||
// #include "cndev_dl.h" | |||||
import "C" | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
"time" | |||||
) | |||||
func errorString(ret C.cndevRet_t) error { | |||||
if ret == C.CNDEV_SUCCESS { | |||||
return nil | |||||
} | |||||
err := C.GoString(C.cndevGetErrorString(ret)) | |||||
return fmt.Errorf("cndev: %v", err) | |||||
} | |||||
func Init() error { | |||||
r := C.cndevInit_dl() | |||||
if r == C.CNDEV_ERROR_UNINITIALIZED { | |||||
return errors.New("could not load CNDEV library") | |||||
} | |||||
return errorString(r) | |||||
} | |||||
func Release() error { | |||||
r := C.cndevRelease_dl() | |||||
return errorString(r) | |||||
} | |||||
func GetDeviceCount() (uint, error) { | |||||
var cardInfos C.cndevCardInfo_t | |||||
cardInfos.version = C.int(1) | |||||
r := C.cndevGetDeviceCount(&cardInfos) | |||||
return uint(cardInfos.Number), errorString(r) | |||||
} | |||||
func getDeviceUUID(idx uint) (string, error) { | |||||
var cardSN C.cndevCardSN_t | |||||
cardSN.version = C.int(3) | |||||
r := C.cndevGetCardSN(&cardSN, C.int(idx)) | |||||
err := errorString(r) | |||||
if err != nil { | |||||
return "", err | |||||
} | |||||
sn := fmt.Sprintf("%x", int(cardSN.sn)) | |||||
uuid := "MLU-" + sn | |||||
return uuid, nil | |||||
} | |||||
func getDevicePath(idx uint) (string, error) { | |||||
var cardName C.cndevCardName_t | |||||
var path string | |||||
cardName.version = C.int(3) | |||||
r := C.cndevGetCardName(&cardName, C.int(idx)) | |||||
err := errorString(r) | |||||
if err != nil { | |||||
return "", err | |||||
} | |||||
cardType := cardName.id | |||||
if cardType == C.MLU100 { | |||||
path = fmt.Sprintf("/dev/cambricon_c10Dev%d", idx) | |||||
} else { | |||||
path = fmt.Sprintf("/dev/cambricon_dev%d", idx) | |||||
} | |||||
return path, nil | |||||
} | |||||
func getDeviceHealthState(idx uint, delayTime int) (int, error) { | |||||
var ret C.cndevRet_t | |||||
var cardHealthState C.cndevCardHealthState_t | |||||
var healthCode int | |||||
cardHealthState.version = C.int(3) | |||||
// sleep for some seconds | |||||
time.Sleep(time.Duration(delayTime) * time.Second) | |||||
ret = C.cndevGetCardHealthState(&cardHealthState, C.int(idx)) | |||||
healthCode = int(cardHealthState.health) | |||||
return healthCode, errorString(ret) | |||||
} | |||||
func getDevicePCIeInfo(idx uint) (*pcie, error) { | |||||
var pcieInfo C.cndevPCIeInfo_t | |||||
pcieInfo.version = C.int(3) | |||||
r := C.cndevGetPCIeInfo(&pcieInfo, C.int(idx)) | |||||
if err := errorString(r); err != nil { | |||||
return nil, err | |||||
} | |||||
return &pcie{ | |||||
domain: int(pcieInfo.domain), | |||||
bus: int(pcieInfo.bus), | |||||
device: int(pcieInfo.device), | |||||
function: int(pcieInfo.function), | |||||
}, nil | |||||
} |
@@ -1,72 +0,0 @@ | |||||
// Copyright 2020 Cambricon, Inc. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package cndev | |||||
import ( | |||||
"fmt" | |||||
"log" | |||||
"os" | |||||
"testing" | |||||
"github.com/stretchr/testify/assert" | |||||
) | |||||
func TestMain(m *testing.M) { | |||||
err := Init() | |||||
if err != nil { | |||||
log.Fatal(err) | |||||
} | |||||
ret := m.Run() | |||||
if ret != 0 { | |||||
os.Exit(ret) | |||||
} | |||||
err = Release() | |||||
if err != nil { | |||||
log.Fatal(err) | |||||
} | |||||
} | |||||
func TestGetDeviceCount(t *testing.T) { | |||||
count, err := GetDeviceCount() | |||||
assert.NoError(t, err) | |||||
assert.Equal(t, uint(8), count) | |||||
} | |||||
func TestGetDeviceUUID(t *testing.T) { | |||||
uuid, err := getDeviceUUID(uint(0)) | |||||
assert.NoError(t, err) | |||||
assert.Equal(t, fmt.Sprintf("MLU-%x", 2701111), uuid) | |||||
} | |||||
func TestGetDevicePath(t *testing.T) { | |||||
path, err := getDevicePath(uint(1)) | |||||
assert.NoError(t, err) | |||||
assert.Equal(t, "/dev/cambricon_dev1", path) | |||||
} | |||||
func TestGetDeviceHealthState(t *testing.T) { | |||||
health, err := getDeviceHealthState(uint(0), 1) | |||||
assert.NoError(t, err) | |||||
assert.Equal(t, 1, health) | |||||
} | |||||
func TestGetDevicePCIeInfo(t *testing.T) { | |||||
pcie, err := getDevicePCIeInfo(uint(0)) | |||||
assert.NoError(t, err) | |||||
assert.Equal(t, 0, pcie.domain) | |||||
assert.Equal(t, 12, pcie.bus) | |||||
assert.Equal(t, 13, pcie.device) | |||||
assert.Equal(t, 1, pcie.function) | |||||
} |
@@ -1,155 +0,0 @@ | |||||
// Copyright 2020 Cambricon, Inc. | |||||
// | |||||
// Licensed under the Apache License, Version 2.0 (the "License"); | |||||
// you may not use this file except in compliance with the License. | |||||
// You may obtain a copy of the License at | |||||
// | |||||
// http://www.apache.org/licenses/LICENSE-2.0 | |||||
// | |||||
// Unless required by applicable law or agreed to in writing, software | |||||
// distributed under the License is distributed on an "AS IS" BASIS, | |||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
// See the License for the specific language governing permissions and | |||||
// limitations under the License. | |||||
package cndev | |||||
import ( | |||||
"bytes" | |||||
"errors" | |||||
"fmt" | |||||
"io/ioutil" | |||||
"log" | |||||
"os/exec" | |||||
"strconv" | |||||
"strings" | |||||
"time" | |||||
) | |||||
type pcie struct { | |||||
domain int | |||||
bus int | |||||
device int | |||||
function int | |||||
} | |||||
type Device struct { | |||||
Slot uint | |||||
UUID string | |||||
Path string | |||||
pcie *pcie | |||||
} | |||||
func NewDeviceLite(idx uint, pcieAware bool) (*Device, error) { | |||||
var pcie *pcie | |||||
uuid, err := getDeviceUUID(idx) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
path, err := getDevicePath(idx) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if pcieAware { | |||||
pcie, err = getDevicePCIeInfo(idx) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
} | |||||
return &Device{ | |||||
Slot: idx, | |||||
UUID: uuid, | |||||
Path: path, | |||||
pcie: pcie, | |||||
}, nil | |||||
} | |||||
func (d *Device) GetGeviceHealthState(delayTime int) (int, error) { | |||||
return getDeviceHealthState(d.Slot, delayTime) | |||||
} | |||||
func (d *Device) GetPCIeID() (string, error) { | |||||
if d.pcie == nil { | |||||
return "", errors.New("device has no PCIe info") | |||||
} | |||||
domain := strconv.FormatInt(int64(d.pcie.domain), 16) | |||||
domain = strings.Repeat("0", 4-len([]byte(domain))) + domain | |||||
bus := strconv.FormatInt(int64(d.pcie.bus), 16) | |||||
if d.pcie.bus < 16 { | |||||
bus = "0" + bus | |||||
} | |||||
device := strconv.FormatInt(int64(d.pcie.device), 16) | |||||
if d.pcie.device < 16 { | |||||
device = "0" + device | |||||
} | |||||
function := strconv.FormatInt(int64(d.pcie.function), 16) | |||||
return domain + ":" + bus + ":" + device + "." + function, nil | |||||
} | |||||
func (d *Device) EnableSriov(num int) error { | |||||
err := d.ValidateSriovNum(num) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
id, err := d.GetPCIeID() | |||||
if err != nil { | |||||
return err | |||||
} | |||||
path := "/sys/bus/pci/devices/" + id + "/sriov_numvfs" | |||||
vf, err := getNumFromFile(path) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
if vf == 0 { | |||||
return enableSriov(id, num) | |||||
} | |||||
if vf != num { | |||||
return fmt.Errorf("sriov enabled. vf number %d different from set %d", vf, num) | |||||
} | |||||
log.Println("sriov already enabled, pass") | |||||
return nil | |||||
} | |||||
func (d *Device) ValidateSriovNum(num int) error { | |||||
id, err := d.GetPCIeID() | |||||
if err != nil { | |||||
return err | |||||
} | |||||
path := "/sys/bus/pci/devices/" + id + "/sriov_totalvfs" | |||||
max, err := getNumFromFile(path) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
if num < 1 || num > max { | |||||
return fmt.Errorf("invalid sriov number %d, maximum: %d, minimum: 1", num, max) | |||||
} | |||||
return nil | |||||
} | |||||
func getNumFromFile(path string) (int, error) { | |||||
output, err := ioutil.ReadFile(path) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
output = bytes.Trim(output, "\n") | |||||
num, err := strconv.ParseInt(string(output), 10, 64) | |||||
return int(num), err | |||||
} | |||||
func enableSriov(id string, num int) error { | |||||
path := "/sys/bus/pci/devices/" + id + "/sriov_numvfs" | |||||
command := "echo " + strconv.Itoa(num) + " > " + path | |||||
err := exec.Command("bash", "-c", command).Run() | |||||
if err != nil { | |||||
return err | |||||
} | |||||
time.Sleep(time.Second) | |||||
newNum, err := getNumFromFile(path) | |||||
if err != nil || newNum != num { | |||||
return fmt.Errorf("the number of VFs is still not correct after enabling vf again. new: %d, err: %v", newNum, err) | |||||
} | |||||
return nil | |||||
} |
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》