Java 通过API操作Harbor

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);
            }
        };
    }
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值