本文整理汇总了Golang中github.com/AlexanderChen1989/go-json-rest/rest.ResponseWriter.Header方法的典型用法代码示例。如果您正苦于以下问题:Golang ResponseWriter.Header方法的具体用法?Golang ResponseWriter.Header怎么用?Golang ResponseWriter.Header使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/AlexanderChen1989/go-json-rest/rest.ResponseWriter
的用法示例。
在下文中一共展示了ResponseWriter.Header方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: UploadDevice
func UploadDevice(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "text/html; charset=utf-8")
r.ParseForm()
file, handle, err := r.FormFile("file")
if err != nil {
w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}"))
return
}
cd, err := iconv.Open("UTF-8", "GBK")
if err != nil {
w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}"))
return
}
defer cd.Close()
dir := "/tmp/cloudboot-server/"
if !util.FileExist(dir) {
err := os.MkdirAll(dir, 0777)
if err != nil {
w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}"))
return
}
}
list := strings.Split(handle.Filename, ".")
fix := list[len(list)-1]
h := md5.New()
h.Write([]byte(fmt.Sprintf("%s", time.Now().UnixNano()) + handle.Filename))
cipherStr := h.Sum(nil)
md5 := fmt.Sprintf("%s", hex.EncodeToString(cipherStr))
filename := "osinstall-upload-" + md5 + "." + fix
result := make(map[string]interface{})
result["result"] = filename
if util.FileExist(dir + filename) {
os.Remove(dir + filename)
}
f, err := os.OpenFile(dir+filename, os.O_WRONLY|os.O_CREATE, 0666)
io.Copy(f, file)
if err != nil {
w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}"))
return
}
defer f.Close()
defer file.Close()
data := map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}
json, err := json.Marshal(data)
if err != nil {
w.Write([]byte("{\"Message\":\"" + err.Error() + "\",\"Status\":\"error\"}"))
return
}
w.Write([]byte(json))
return
}
示例2: GetSystemBySn
func GetSystemBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
var info struct {
Sn string
Type string
}
info.Sn = r.FormValue("sn")
info.Type = r.FormValue("type")
info.Sn = strings.TrimSpace(info.Sn)
info.Type = strings.TrimSpace(info.Type)
if info.Type == "" {
info.Type = "raw"
}
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""})
}
return
}
if info.Sn == "" {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空"})
}
return
}
mod, err := repo.GetSystemBySn(info.Sn)
if err != nil {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""})
}
return
}
if info.Type == "raw" {
w.Header().Add("Content-type", "text/html; charset=utf-8")
w.Write([]byte(mod.Content))
} else {
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "成功获取system信息", "Content": mod})
}
}
示例3: IsInPreInstallList
func IsInPreInstallList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""})
return
}
var info struct {
Sn string
}
if err := r.DecodeJSONPayload(&info); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误", "Content": ""})
return
}
info.Sn = strings.TrimSpace(info.Sn)
if info.Sn == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空!"})
return
}
deviceId, err := repo.GetDeviceIdBySn(info.Sn)
result := make(map[string]string)
if err != nil {
result["Result"] = "false"
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "该设备不在安装列表里", "Content": result})
return
}
device, err := repo.GetDeviceById(deviceId)
if err != nil {
result["Result"] = "false"
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "该设备不在安装列表里", "Content": result})
return
}
if device.Status == "pre_install" || device.Status == "installing" {
result["Result"] = "true"
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "该设备在安装列表里", "Content": result})
} else {
result["Result"] = "false"
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "该设备不在安装列表里", "Content": result})
}
}
示例4: ExportHardware
func ExportHardware(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
/*
var info struct {
Ids []int
}
if err := r.DecodeJSONPayload(&info); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()})
return
}
*/
var where string
where = " and is_system_add = 'Yes' "
idsParam := r.FormValue("ids")
if idsParam != "" {
ids := strings.Split(idsParam, ",")
if len(ids) > 0 {
/*
for _, id := range info.Ids {
ids = append(ids, strconv.Itoa(id))
}
*/
where += " and id in (" + strings.Join(ids, ",") + ")"
}
}
company := r.FormValue("company")
if company != "" {
where += " and company = '" + company + "' "
}
product := r.FormValue("product")
if product != "" {
where += " and product = '" + product + "' "
}
modelName := r.FormValue("modelName")
if modelName != "" {
where += " and model_name = '" + modelName + "' "
}
mods, err := repo.GetHardwareListWithPage(10000, 0, where)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
var result []map[string]interface{}
for _, v := range mods {
result2 := make(map[string]interface{})
result2["Company"] = v.Company
result2["Product"] = v.Product
result2["ModelName"] = v.ModelName
result2["IsSystemAdd"] = v.IsSystemAdd
result2["Tpl"] = v.Tpl
result2["Data"] = v.Data
result = append(result, result2)
}
filename := "idcos-osinstall-hardware.json"
w.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename='%s';filename*=utf-8''%s", filename, filename))
w.Header().Add("Content-Type", "application/octet-stream")
err = json.NewEncoder(w).Encode(result)
if err != nil {
fmt.Println(err)
}
}
示例5: GetDevicePrepareInstallInfo
//查询安装信息
func GetDevicePrepareInstallInfo(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
var info struct {
Sn string
Company string
Product string
ModelName string
}
if err := r.DecodeJSONPayload(&info); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()})
return
}
info.Sn = strings.TrimSpace(info.Sn)
info.Company = strings.TrimSpace(info.Company)
info.Product = strings.TrimSpace(info.Product)
info.ModelName = strings.TrimSpace(info.ModelName)
if info.Sn == "" || info.Company == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN及厂商信息不能为空!"})
return
}
result := make(map[string]string)
//校验是否在配置库
isValidate, err := repo.ValidateHardwareProductModel(info.Company, info.Product, info.ModelName)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": result})
return
}
if isValidate == true {
result["IsVerify"] = "true"
} else {
result["IsVerify"] = "false"
}
result["IsSkipHardwareConfig"] = "false"
//是否跳过硬件配置(用户是否配置硬件配置模板)
if info.Sn != "" {
count, err := repo.CountDeviceBySn(info.Sn)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": result})
return
}
if count > 0 {
device, err := repo.GetDeviceBySn(info.Sn)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": result})
return
}
if device.HardwareID <= uint(0) {
result["IsSkipHardwareConfig"] = "true"
}
}
}
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result})
}
示例6: ReportProductInfo
//上报厂商信息
func ReportProductInfo(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
type NicInfo struct {
Name string
Mac string
Ip string
}
type CpuInfo struct {
Model string
Core string
}
type DiskInfo struct {
Name string
Size string
}
type MemoryInfo struct {
Name string
Size string
}
type MotherboardInfo struct {
Name string
Model string
}
var infoFull struct {
Sn string
Company string
Product string
ModelName string
Ip string
Mac string
Nic []NicInfo
Cpu CpuInfo
CpuSum uint
Memory []MemoryInfo
MemorySum uint
Disk []DiskInfo
DiskSum uint
Motherboard MotherboardInfo
Raid string
Oob string
DeviceID uint
IsVm string
NicDevice string
IsShowInScanList string
}
var info struct {
Sn string
Company string
Product string
ModelName string
Ip string
Mac string
Nic string
Cpu string
CpuSum uint
Memory string
MemorySum uint
Disk string
DiskSum uint
Motherboard string
Raid string
Oob string
DeviceID uint
IsVm string
NicDevice string
IsShowInScanList string
}
if err := r.DecodeJSONPayload(&infoFull); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()})
return
}
infoFull.Sn = strings.TrimSpace(infoFull.Sn)
infoFull.Company = strings.TrimSpace(infoFull.Company)
infoFull.Product = strings.TrimSpace(infoFull.Product)
infoFull.ModelName = strings.TrimSpace(infoFull.ModelName)
infoFull.IsVm = strings.TrimSpace(infoFull.IsVm)
infoFull.NicDevice = strings.TrimSpace(infoFull.NicDevice)
info.Sn = infoFull.Sn
info.Company = infoFull.Company
info.Product = infoFull.Product
info.ModelName = infoFull.ModelName
info.Ip = infoFull.Ip
info.Mac = infoFull.Mac
info.Raid = infoFull.Raid
info.Oob = infoFull.Oob
info.DeviceID = infoFull.DeviceID
info.CpuSum = infoFull.CpuSum
info.MemorySum = infoFull.MemorySum
//.........这里部分代码省略.........
示例7: ExportScanDeviceList
//.........这里部分代码省略.........
info.MemoryRule = strings.TrimSpace(info.MemoryRule)
info.Memory = strings.TrimSpace(info.Memory)
info.DiskRule = strings.TrimSpace(info.DiskRule)
info.Disk = strings.TrimSpace(info.Disk)
var where string
where = " and t1.is_show_in_scan_list = 'Yes' "
if info.UserID != "" {
var userID int
userID, _ = strconv.Atoi(info.UserID)
where += " and t1.user_id = '" + fmt.Sprintf("%d", userID) + "'"
}
idsParam := r.FormValue("ids")
if idsParam != "" {
ids := strings.Split(idsParam, ",")
if len(ids) > 0 {
where += " and t1.id in (" + strings.Join(ids, ",") + ")"
}
}
if info.Company != "" {
where += " and t1.company = '" + info.Company + "'"
}
if info.Product != "" {
where += " and t1.product = '" + info.Product + "'"
}
if info.ModelName != "" {
where += " and t1.model_name = '" + info.ModelName + "'"
}
if info.CpuRule != "" && info.Cpu != "" {
where += " and t1.cpu_sum " + info.CpuRule + info.Cpu
}
if info.MemoryRule != "" && info.Memory != "" {
where += " and t1.memory_sum " + info.MemoryRule + info.Memory
}
if info.DiskRule != "" && info.Disk != "" {
where += " and t1.disk_sum " + info.DiskRule + info.Disk
}
if info.Keyword != "" {
where += " and ( "
info.Keyword = strings.Replace(info.Keyword, "\n", ",", -1)
info.Keyword = strings.Replace(info.Keyword, ";", ",", -1)
list := strings.Split(info.Keyword, ",")
for k, v := range list {
var str string
v = strings.TrimSpace(v)
if k == 0 {
str = ""
} else {
str = " or "
}
where += str + " t1.sn = '" + v + "' or t1.ip = '" + v + "' or t1.company = '" + v + "' or t1.product = '" + v + "' or t1.model_name = '" + v + "'"
}
isValidate, _ := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", info.Keyword)
if isValidate {
where += " or t1.nic like '%%\"" + info.Keyword + "\"%%' "
}
where += " ) "
}
mods, err := repo.GetManufacturerListWithPage(1000000, 0, where)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
var str string
var strTitle string
strTitle = "SN(必填),主机名(必填),IP(必填),操作系统(必填),硬件配置模板,系统安装模板(必填),位置(必填),财编,管理IP,是否支持安装虚拟机(Yes或No)\n"
for _, device := range mods {
str += device.Sn + ","
str += ","
str += ","
str += ","
str += ","
str += ","
str += ","
str += ","
str += ","
str += "\n"
}
cd, err := iconv.Open("gbk", "utf-8") // convert utf-8 to gbk
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
defer cd.Close()
gbkStr := cd.ConvString(strTitle)
bytes := []byte(gbkStr + str)
filename := "idcos-osinstall-scan-device.csv"
w.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename='%s';filename*=utf-8''%s", filename, filename))
w.Header().Add("Content-Type", "application/octet-stream")
w.Write(bytes)
}
示例8: GetNetworkBySn
func GetNetworkBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
var info struct {
Sn string
Type string
}
info.Sn = r.FormValue("sn")
info.Type = r.FormValue("type")
info.Sn = strings.TrimSpace(info.Sn)
info.Type = strings.TrimSpace(info.Type)
if info.Type == "" {
info.Type = "raw"
}
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""})
}
return
}
if info.Sn == "" {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空"})
}
return
}
deviceId, err := repo.GetDeviceIdBySn(info.Sn)
if err != nil {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""})
}
return
}
device, err := repo.GetDeviceById(deviceId)
if err != nil {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""})
}
return
}
mod, err := repo.GetNetworkBySn(info.Sn)
if err != nil {
if info.Type == "raw" {
w.Write([]byte(""))
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""})
}
return
}
result := make(map[string]interface{})
result["Hostname"] = device.Hostname
result["Ip"] = device.Ip
result["Netmask"] = mod.Netmask
result["Gateway"] = mod.Gateway
result["Vlan"] = mod.Vlan
result["Trunk"] = mod.Trunk
result["Bonding"] = mod.Bonding
if info.Type == "raw" {
w.Header().Add("Content-type", "text/html; charset=utf-8")
var str string
if device.Hostname != "" {
str += "HOSTNAME=\"" + device.Hostname + "\""
}
if device.Ip != "" {
str += "\nIPADDR=\"" + device.Ip + "\""
}
if mod.Netmask != "" {
str += "\nNETMASK=\"" + mod.Netmask + "\""
}
if mod.Gateway != "" {
str += "\nGATEWAY=\"" + mod.Gateway + "\""
}
if mod.Vlan != "" {
str += "\nVLAN=\"" + mod.Vlan + "\""
}
if mod.Trunk != "" {
str += "\nTrunk=\"" + mod.Trunk + "\""
}
if mod.Bonding != "" {
str += "\nBonding=\"" + mod.Bonding + "\""
}
w.Write([]byte(str))
} else {
w.Header().Add("Content-type", "application/json; charset=utf-8")
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "成功获取network信息", "Content": result})
//.........这里部分代码省略.........
示例9: GetHardwareBySn
func GetHardwareBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
//repo := middleware.RepoFromContext(ctx)
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
//rest.Error(w, " ,", http.StatusInternalServerError)
//w.WriteHeader(http.StatusFound)
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""})
return
}
var info struct {
Sn string
}
if err := r.DecodeJSONPayload(&info); err != nil {
//rest.Error(w, " ", http.status)
//w.WriteHeader(http.StatusFound)
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误", "Content": ""})
return
}
info.Sn = strings.TrimSpace(info.Sn)
if info.Sn == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空!"})
return
}
hardware, err := repo.GetHardwareBySn(info.Sn)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""})
return
}
type ChildData struct {
Name string `json:"Name"`
Value string `json:"Value"`
}
type ScriptData struct {
Name string `json:"Name"`
Data []*ChildData `json:"Data"`
}
var data []*ScriptData
var result2 []map[string]interface{}
if hardware.Data != "" {
bytes := []byte(hardware.Data)
errData := json.Unmarshal(bytes, &data)
if errData != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""})
return
}
for _, v := range data {
result3 := make(map[string]interface{})
result3["Name"] = v.Name
var result5 []map[string]interface{}
for _, v2 := range v.Data {
result4 := make(map[string]interface{})
result4["Name"] = v2.Name
result4["Script"] = base64.StdEncoding.EncodeToString([]byte(v2.Value))
result5 = append(result5, result4)
}
result3["Scripts"] = result5
result2 = append(result2, result3)
}
}
result := make(map[string]interface{})
result["Company"] = hardware.Company
result["Product"] = hardware.Product
result["ModelName"] = hardware.ModelName
/*
resultHardware := make(map[string]string)
resultHardware["Raid"] = base64.StdEncoding.EncodeToString([]byte(hardware.Raid))
resultHardware["Oob"] = base64.StdEncoding.EncodeToString([]byte(hardware.Oob))
resultHardware["Bios"] = base64.StdEncoding.EncodeToString([]byte(hardware.Bios))
*/
result["Hardware"] = result2
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "成功获取hardware信息", "Content": result})
}
示例10: ReportProductInfo
//上报厂商信息
func ReportProductInfo(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
var info struct {
Sn string
Company string
Product string
ModelName string
}
if err := r.DecodeJSONPayload(&info); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"})
return
}
info.Sn = strings.TrimSpace(info.Sn)
info.Company = strings.TrimSpace(info.Company)
info.Product = strings.TrimSpace(info.Product)
info.ModelName = strings.TrimSpace(info.ModelName)
if info.Sn == "" || info.Company == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误!"})
return
}
deviceId, err := repo.GetDeviceIdBySn(info.Sn)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该设备不存在!"})
return
}
device, err := repo.GetDeviceById(deviceId)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
count, err := repo.CountManufacturerByDeviceID(device.ID)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
result := make(map[string]string)
if count > 0 {
manufacturer, err := repo.GetManufacturerByDeviceID(device.ID)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": result})
return
}
_, errUpdate := repo.UpdateManufacturerById(manufacturer.ID, info.Company, info.Product, info.ModelName)
if errUpdate != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errUpdate.Error(), "Content": result})
return
}
} else {
_, err := repo.AddManufacturer(device.ID, info.Company, info.Product, info.ModelName)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": result})
return
}
}
//校验是否在配置库
isValidate, err := repo.ValidateHardwareProductModel(info.Company, info.Product, info.ModelName)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": result})
return
}
if isValidate == true {
result["IsVerify"] = "true"
} else {
result["IsVerify"] = "false"
}
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result})
}
示例11: ReportMacInfo
//上报Mac信息,生成Pxe文件
func ReportMacInfo(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
conf, ok := middleware.ConfigFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
if conf.OsInstall.PxeConfigDir == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "Pxe配置文件目录没有指定"})
return
}
var info struct {
Sn string
Mac string
}
if err := r.DecodeJSONPayload(&info); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"})
return
}
info.Sn = strings.TrimSpace(info.Sn)
info.Mac = strings.TrimSpace(info.Mac)
if info.Sn == "" || info.Mac == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN和Mac参数不能为空!"})
return
}
//mac 大写转为 小写
info.Mac = strings.ToLower(info.Mac)
deviceId, err := repo.GetDeviceIdBySn(info.Sn)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该设备不存在!"})
return
}
device, err := repo.GetDeviceById(deviceId)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
osConfig, err := repo.GetOsConfigById(device.OsID)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "PXE信息没有配置" + err.Error()})
return
}
//录入Mac信息
count, err := repo.CountMacByMacAndDeviceID(info.Mac, device.ID)
if count <= 0 {
count, err := repo.CountMacByMac(info.Mac)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
if count > 0 {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该MAC地址已被其他机器录入"})
return
}
_, errAddMac := repo.AddMac(device.ID, info.Mac)
if errAddMac != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAddMac.Error()})
return
}
}
//替换占位符
osConfig.Pxe = strings.Replace(osConfig.Pxe, "{sn}", info.Sn, -1)
pxeFileName := util.GetPxeFileNameByMac(info.Mac)
errCreatePxeFile := util.CreatePxeFile(conf.OsInstall.PxeConfigDir, pxeFileName, osConfig.Pxe)
if errCreatePxeFile != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "配置文件生成失败" + err.Error()})
return
}
result := make(map[string]string)
result["Result"] = "true"
w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result})
}
示例12: ReportInstallInfo
//上报安装进度
func ReportInstallInfo(ctx context.Context, w rest.ResponseWriter, r *rest.Request) {
w.Header().Add("Content-type", "application/json; charset=utf-8")
repo, ok := middleware.RepoFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
conf, ok := middleware.ConfigFromContext(ctx)
if !ok {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"})
return
}
if conf.OsInstall.PxeConfigDir == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "Pxe配置文件目录没有指定"})
return
}
var info struct {
Sn string
Title string
InstallProgress float64
InstallLog string
}
if err := r.DecodeJSONPayload(&info); err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"})
return
}
info.Sn = strings.TrimSpace(info.Sn)
info.Title = strings.TrimSpace(info.Title)
if info.Sn == "" {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空!"})
return
}
deviceId, err := repo.GetDeviceIdBySn(info.Sn)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该设备不存在!"})
return
}
device, err := repo.GetDeviceById(deviceId)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
var status string
var logTitle string
if info.InstallProgress == -1 {
status = "failure"
info.InstallProgress = 0
logTitle = info.Title
} else if info.InstallProgress >= 0 && info.InstallProgress < 1 {
status = "installing"
logTitle = info.Title + "(" + fmt.Sprintf("安装进度 %.1f", info.InstallProgress*100) + "%)"
} else if info.InstallProgress == 1 {
status = "success"
logTitle = info.Title + "(" + fmt.Sprintf("安装进度 %.1f", info.InstallProgress*100) + "%)"
//logTitle = "安装成功"
} else {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "安装进度参数不正确!"})
return
}
/*
if device.InstallLog != "" {
info.InstallLog = device.InstallLog + "\n" + info.InstallLog
}
*/
_, errUpdate := repo.UpdateInstallInfoById(device.ID, status, info.InstallProgress)
if errUpdate != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errUpdate.Error()})
return
}
//删除PXE配置文件
if info.InstallProgress == 1 {
macs, err := repo.GetMacListByDeviceID(device.ID)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
for _, mac := range macs {
pxeFileName := util.GetPxeFileNameByMac(mac.Mac)
confDir := conf.OsInstall.PxeConfigDir
if util.FileExist(confDir + "/" + pxeFileName) {
err := os.Remove(confDir + "/" + pxeFileName)
if err != nil {
w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()})
return
}
}
}
}
//.........这里部分代码省略.........