def test_list_image_tags(self, requests_mock): requests_mock.get( ANY, json={ "code": 0, "data": { "totalRecords": 10, "records": [{ "tag": "latest", "stageTag": "", "size": 527, "lastModifiedBy": fake_username, "lastModifiedDate": "2021-10-29T15:48:55.121", "downloadCount": 0, }], }, }, ) client = bk_repo.BkRepoClient(username=fake_username, password=fake_pwd) resp_data = client.list_image_tags(fake_project_code, fake_project_code, "test", bk_repo.PageData()) assert requests_mock.called assert resp_data["totalRecords"] == 10 assert resp_data["records"][0]["tag"] == "latest"
def test_delete_chart_version_error(self, requests_mock): requests_mock.delete(ANY, json={"error": "error message"}) client = bk_repo.BkRepoClient(fake_username, password=fake_pwd) with pytest.raises(bk_repo.BkRepoDeleteVersionError): client.delete_chart_version(fake_project_code, fake_project_code, fake_chart_name, fake_chart_version)
def test_list_images(self, requests_mock): requests_mock.get( ANY, json={ "code": 0, "data": { "totalRecords": 10, "records": [{ "name": "busybox", "lastModifiedBy": fake_username, "lastModifiedDate": "2021-10-29T15:48:55.121", "downloadCount": 0, "logoUrl": "", "description": "", }], }, }, ) client = bk_repo.BkRepoClient(username=fake_username, password=fake_pwd) resp_data = client.list_images(fake_project_code, fake_project_code, bk_repo.PageData()) assert requests_mock.called assert resp_data["totalRecords"] == 10 assert resp_data["records"][0]["name"] == "busybox"
def test_set_auth(self, requests_mock): requests_mock.post(ANY, json={"result": True, "data": {"foo": "bar"}}) client = bk_repo.BkRepoClient(fake_username, access_token=fake_access_token) resp_data = client.set_auth(fake_project_code, fake_username, fake_pwd) assert resp_data == {"foo": "bar"} assert requests_mock.request_history[0].method == "POST"
def test_list_charts(self, requests_mock): requests_mock.get(ANY, json={"foo": "bar"}) client = bk_repo.BkRepoClient(fake_username, password=fake_pwd) resp_data = client.list_charts(fake_project_code, fake_project_code) assert resp_data == {"foo": "bar"} assert requests_mock.called
def test_create_chart_repo_ok(self, raw_resp, expected_resp, requests_mock): requests_mock.post(ANY, json=raw_resp) client = bk_repo.BkRepoClient(fake_username, access_token=fake_access_token) resp_data = client.create_chart_repo(fake_project_code) assert resp_data == raw_resp assert requests_mock.request_history[0].method == "POST"
def test_create_project_ok(self, raw_resp, expected_resp, requests_mock): requests_mock.post(ANY, json=raw_resp) client = bk_repo.BkRepoClient(fake_username, access_token=fake_access_token) resp_data = client.create_project(fake_project_code, fake_project_name, fake_project_description) assert resp_data == expected_resp assert requests_mock.called
def test_get_chart_versions(self, requests_mock): requests_mock.get(ANY, json={"foo": "bar"}) client = bk_repo.BkRepoClient(fake_username, password=fake_pwd) resp_data = client.get_chart_versions(fake_project_code, fake_project_code, fake_chart_name) assert resp_data == {"foo": "bar"} assert requests_mock.called assert requests_mock.request_history[0].method == "GET"
def test_delete_chart_version_ok(self, raw_resp, expected_resp, requests_mock): requests_mock.delete(ANY, json=raw_resp) client = bk_repo.BkRepoClient(fake_username, password=fake_pwd) resp = client.delete_chart_version(fake_project_code, fake_project_code, fake_chart_name, fake_chart_version) assert resp == expected_resp assert requests_mock.called assert requests_mock.request_history[0].method == "DELETE"
def _delete_version(self, username: str, pwd: str, project_code: str, name: str, version: str): # 兼容harbor中chart仓库项目名称 project_name = DEFAULT_CHART_REPO_PROJECT_NAME or project_code try: client = bk_repo.BkRepoClient(username, password=pwd) client.delete_chart_version(project_name, project_code, name, version) except bk_repo.BkRepoDeleteVersionError as e: raise error_codes.APIError( f"delete chart: {name} version: {version} failed, {e}")
def test_create_repo_error(self, requests_mock): requests_mock.post(ANY, json={ "code": fake_error_code, "messahe": "error message" }) client = bk_repo.BkRepoClient(username=fake_username, access_token=fake_access_token) with pytest.raises(bk_repo.BkRepoCreateRepoError): client.create_repo(fake_project_code)
def create_bkrepo_project_and_depot(project: FancyDict, username: str): """创建制品库项目及镜像仓库""" client = bk_repo.BkRepoClient() # 创建项目 try: client.create_project(project.project_code, project.project_name, project.description) except bk_repo.BkRepoCreateProjectError as e: logger.error("创建制品库的项目失败: %s", e) # 创建镜像仓库 try: client.create_repo(f"{project.project_code}-docker", repo_type="DOCKER") except bk_repo.BkRepoCreateRepoError as e: logger.error("创建制品库的镜像仓库失败: %s", e)
def get_or_create_private_repo(user: User, project: FancyDict): access_token = user.token.access_token username = user.username project_code = project.english_name project_id = project.project_id private_repos = Repository.objects.filter(name=project_code, project_id=project_id) # 当仓库和角色权限创建后,则直接返回 repo = private_repos.first() if repo and RepositoryAuth.objects.filter(repo=repo).exists(): return repo repo_client = bk_repo.BkRepoClient(username=username, access_token=access_token) if not repo: # 创建bkrepo项目 try: repo_client.create_project(project_code, project.project_name, project.description) except bk_repo.BkRepoCreateProjectError as e: raise error_codes.APIError(f"create bk repo project error, {e}") # 创建helm repo try: repo_client.create_repo(project_code) except bk_repo.BkRepoCreateRepoError as e: raise error_codes.APIError(f"create bk repo error, {e}") # db中存储repo信息 repo_params = { "url": f"{settings.HELM_REPO_DOMAIN}/{project_code}/{project_code}/", "provider": "bkrepo", "storage_info": {}, } repo = Repository.objects.get_or_create(name=project_code, project_id=project_id, defaults=repo_params)[0] # 创建admin账号 role_list = ["admin"] for role in role_list: basic_auth = BasicAuthGenerator().generate_basic_auth_by_role(role) repo_auth_params = {"type": "basic", "credentials": basic_auth} repo_client.set_auth(project_code, basic_auth["username"], basic_auth["password"]) RepositoryAuth.objects.get_or_create(repo=repo, role=role, defaults=repo_auth_params) return repo