Java 通过API操作Harbor
Harbor提供了api,我们可以利用java调取api的形式创建harbor项目和用户,查询项目里的镜像等,还可以push本地镜像到仓库里,以下代码前提搭建好了harbor环境。
Api地址:http://IP:7005/#/Products
harbor可视化管理页面地址:http://IP:7005/harbor/projects
public interface HarborRequest {
/**
* 创建Harbor用户
* @param harborUser
* @return
*/
void createUser(HarborUser harborUser);
/**
* 创建project
* @param harborProject
* @return
*/
void createProject(HarborProject harborProject,String username,String password);
/**
* 通过项目名称获取项目信息
* @return
*/
Integer queryProject(String name);
/**
* 通过项目id获取所有镜像
* @return
*/
List<Repositories> queryImagesByProjectId(Integer projectId);
/**
* 通过镜像名获取所有镜像标签
* @return
*/
List<ImagesTags> queryImagesTagsByImageName(String imageName);
}
@Slf4j
@Service
public class HarborRequestImpl implements HarborRequest {
@Autowired
RestTemplate restTemplate;
@Autowired
HarborConfig harborConfig;
/**
* harbor管理员账户
*/
private final String harborAdminUsername = "admin";
private final String harborAdminPassword = "Admin123456";
@Override
public void createUser(HarborUser harborUser) {
//url
String url = harborConfig.getApi() + "/users";
//设置header和认证
HttpHeaders headers = createHeaders(harborAdminUsername,harborAdminPassword);
//拼接参数和header
HttpEntity<String> httpEntity = new HttpEntity<>(JsonUtil.toJson(harborUser), headers);
//重定义restTemplate
restTemplate = new RestTemplate();
//提交请求
ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, httpEntity, new ParameterizedTypeReference<String>(){});
if (resp.getStatusCode().value() == 201){
log.info("####Harbor用户【{}】创建成功",harborUser.getUsername());
}else {
log.info("####Harbor用户【{}】创建失败,错误信息{}:",harborUser.getUsername(),resp.getStatusCode());
}
}
@Override
public void createProject(HarborProject harborProject,String username,String password) {
//url
String url = harborConfig.getApi() + "/projects";
//设置header和认证
HttpHeaders headers = createHeaders(username,password);
//拼接参数和header
HttpEntity<String> httpEntity = new HttpEntity<>(JsonUtil.toJson(harborProject), headers);
//重定义restTemplate
restTemplate = new RestTemplate();
//提交请求
ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, httpEntity, new ParameterizedTypeReference<String>(){});
if (resp.getStatusCode().value() == 201){
log.info("####Harbor项目【{}】创建成功",harborProject.getProject_name());
}else {
log.info("####Harbor项目【{}】创建失败,错误信息{}:",harborProject.getProject_name(),resp.getStatusCode());
}
}
@Override
public Integer queryProject(String name) {
//url
String url = harborConfig.getApi() + "/projects?name="+name;
//设置header和认证
HttpHeaders headers = createHeaders(harborAdminUsername,harborAdminPassword);
//拼接参数和header
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
//重定义restTemplate
restTemplate = new RestTemplate();
//提交请求
ResponseEntity<List<Project>> resp = restTemplate.exchange(url, HttpMethod.GET, httpEntity, new ParameterizedTypeReference<List<Project>>(){});
if (resp.getStatusCode().value() == 200){
if (resp.getBody() != null && resp.getBody().size() > 0){
Project project = resp.getBody().get(0);
if (project != null){
log.info("####Harbor项目【{}】id为:{}",name,project.getProject_id());
return project.getProject_id();
}
}else {
log.info("####Harbor项目【{}】基本信息查询失败:",name);
}
}else {
log.info("####Harbor项目【{}】基本信息查询失败:",name);
}
return null;
}
@Override
public List<Repositories> queryImagesByProjectId(Integer projectId) {
//url
String url = harborConfig.getApi() + "/repositories?page=1&page_size=100&project_id=" + projectId;
//设置header和认证
HttpHeaders headers = createHeaders(harborAdminUsername,harborAdminPassword);
//拼接参数和header
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
//重定义restTemplate
restTemplate = new RestTemplate();
//提交请求
ResponseEntity<List<Repositories>> resp = restTemplate.exchange(url, HttpMethod.GET, httpEntity, new ParameterizedTypeReference<List<Repositories>>(){});
if (resp.getStatusCode().value() == 200){
return resp.getBody();
}else {
log.info("####Harbor项目ID【{}】镜像列表获取失败:",projectId);
return null;
}
}
@Override
public List<ImagesTags> queryImagesTagsByImageName(String imageName) {
//url
String url = harborConfig.getApi() + "/repositories/" + imageName + "/tags";
//设置header和认证
HttpHeaders headers = createHeaders(harborAdminUsername,harborAdminPassword);
//拼接参数和header
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
//重定义restTemplate
restTemplate = new RestTemplate();
//提交请求
ResponseEntity<List<ImagesTags>> resp = restTemplate.exchange(url, HttpMethod.GET, httpEntity, new ParameterizedTypeReference<List<ImagesTags>>(){});
if (resp.getStatusCode().value() == 200){
return resp.getBody();
}else {
log.info("####Harbor镜像【{}】镜像标签获取失败:",imageName);
return null;
}
}
/**
* Authorization Basic认证
* @return
*/
private static HttpHeaders createHeaders(String username,String password) {
return new HttpHeaders() {
{
String auth = username + ":" + password;
String authHeader = "Basic " + Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.US_ASCII));
set("Authorization", authHeader);
}
};
}