// 刷新镜像列表
func (imageService *ImageService) RefreshImageList(image autocode.Image) (err error) {
// 先清空现有images表数据
err = global.GVA_DB.Delete(&[]autocode.Image{}, "1=1").Error
var image_slice []autocode.Image
// 获取所有project http://192.168.xxx.xxx:8081/api/v2.0/projects?page_size=100000
// 根据project获取所有repository http://192.168.xxx.xxx:8081/api/v2.0/projects/test/repositories?page_size=100000
// 根据repository获取所有的artifact http://192.168.xxx.xxx:8081/api/v2.0/projects/test/repositories/zhangxueliang%252Fmyapp/artifacts?pageSize=100000
// 【参数不详】根据artifact获取所有的tag http://192.168.xxx.xxx:8081/api/v2.0/projects/test/repositories/zhangxueliang%252Fmyapp/artifacts/xxx/tags?pageSize=100000

// 获取所有project http://192.168.xxx.xxx:8081/api/v2.0/projects?page_size=100000
project_url := "http://192.168.xxx.xxx:8081/api/v2.0/projects?page_size=100000"
project_slice := []string{}
repository_slice := []string{}
tag_slice := []string{}
var project_map_arr []map[string]string
var repository_map_arr []map[string]string
var artifact_map_arr []map[string]interface{}
project_resp, project_err := http.Get(project_url)
if project_err != nil {
err = project_err
return err
}
defer project_resp.Body.Close()
project_resp_body, _ := ioutil.ReadAll(project_resp.Body)
// project_resp_body_jsonstr := string(project_resp_body)
// fmt.Printf(">>>>>>>>>>>>>>>>>>>>>>>>> %v \n", project_resp_body_jsonstr)
json.Unmarshal(project_resp_body, &project_map_arr)
for _, p := range project_map_arr {
project_name := p["name"]
project_slice = append(project_slice, project_name)
// 根据project获取所有repository http://192.168.xxx.xxx:8081/api/v2.0/projects/test/repositories?page_size=100000
repository_url := fmt.Sprintf("http://192.168.xxx.xxx:8081/api/v2.0/projects/%v/repositories?page_size=100000", project_name)
repository_resp, repository_err := http.Get(repository_url)
if repository_err != nil {
return repository_err
}
defer repository_resp.Body.Close()
repository_resp_body, _ := ioutil.ReadAll(repository_resp.Body)
json.Unmarshal(repository_resp_body, &repository_map_arr)
for _, r := range repository_map_arr {
rname := r["name"]
firstIdx := strings.Index(rname, "/")
repository_name := rname[firstIdx+1:]
repository_slice = append(repository_slice, repository_name)
// 根据repository获取所有的artifact http://192.168.xxx.xxx:8081/api/v2.0/projects/test/repositories/zhangxueliang%252Fmyapp/artifacts?pageSize=100000
// "test/zhangxueliang/myapp"
r_name := strings.Replace(repository_name, "/", "%252F", -1)
artifact_url := fmt.Sprintf("http://192.168.xxx.xxx:8081/api/v2.0/projects/%v/repositories/%v/artifacts?pageSize=100000", project_name, r_name)
artifact_resp, artifact_err := http.Get(artifact_url)
if artifact_err != nil {
return artifact_err
}
defer artifact_resp.Body.Close()
artifact_resp_body, _ := ioutil.ReadAll(artifact_resp.Body)
json.Unmarshal(artifact_resp_body, &artifact_map_arr)
for _, a := range artifact_map_arr {
if a != nil && a["tags"] != nil {
tags := a["tags"].([]interface{})
tag_map := tags[0].(map[string]interface{})
tag_name := tag_map["name"].(string)
tag_slice = append(tag_slice, tag_name)
image = autocode.Image{
HarborUrl: "http://192.168.xxx.xxx:8081",
HarborUser: "admin",
HarborPwd: "123456pwd",
ImageName: repository_name,
ImageTagName: tag_name,
HarborProjName: project_name,
AppName: project_name,
}
image_slice = append(image_slice, image)
}
}
}

}
// fmt.Printf(">>>>>>>>>>>>>>>>>>>>>>>>> %v \n", project_slice)
// fmt.Printf(">>>>>>>>>>>>>>>>>>>>>>>>> %v \n", repository_slice)
// fmt.Printf(">>>>>>>>>>>>>>>>>>>>>>>>> %v \n", tag_slice)

// err = global.GVA_DB.Save(&image).Error
// 批量插入,提高性能
err = global.GVA_DB.CreateInBatches(&image_slice, 100).Error
return err
}