Skip to content

Commit

Permalink
Provisioning data missing from albs-deploy (AlmaLinux/build-system#235)…
Browse files Browse the repository at this point in the history
… (#867)

- writing owner_id to platforms, repositories and sign keys
- writing platform_id to repositories
- added test for platforms/{id}/add-repositories/ endpoint
  • Loading branch information
bklvsky authored Jun 21, 2024
1 parent 8e289bd commit 93084ad
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 1 deletion.
2 changes: 2 additions & 0 deletions alws/crud/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ async def add_to_platform(
new_repos_list = list(set(repositories + platform.repos))

platform.repos = new_repos_list
for repo in new_repos_list:
repo.platform_id = platform_id
db.add(platform)
db.add_all(new_repos_list)
await db.flush()
Expand Down
2 changes: 2 additions & 0 deletions alws/routers/sign_key.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ async def get_sign_keys(
async def create_sign_key(
payload: sign_schema.SignKeyCreate,
db: AsyncSession = Depends(AsyncSessionDependency(key=get_async_db_key())),
user=Depends(get_current_user),
):
try:
payload.owner_id = user.id
return await sign_key.create_sign_key(db, payload)
except (PlatformMissingError, SignKeyAlreadyExistsError) as e:
raise HTTPException(status.HTTP_400_BAD_REQUEST, str(e))
Expand Down
1 change: 1 addition & 0 deletions alws/schemas/repository_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class RepositoryCreate(BaseModel):
priority: int = 10
production: bool = False
mock_enabled: bool = True
owner_id: typing.Optional[int] = None
export_path: typing.Optional[str] = None
pulp_href: typing.Optional[str] = None

Expand Down
1 change: 1 addition & 0 deletions alws/schemas/sign_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class SignKeyCreate(BaseModel):
fingerprint: str
public_url: str
platform_id: typing.Optional[int] = None
owner_id: typing.Optional[int] = None


class SignKeyUpdate(BaseModel):
Expand Down
19 changes: 19 additions & 0 deletions scripts/bootstrap_repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@

import yaml
from fastapi_sqla import open_async_session
from sqlalchemy import update
from syncer import sync

from alws import models
from alws.crud import platform as pl_crud
from alws.crud import repository as repo_crud
from alws.dependencies import get_async_db_key
from alws.schemas import platform_schema, remote_schema, repository_schema
from alws.utils.fastapi_sqla_setup import setup_all
from alws.utils.pulp_client import PulpClient
from scripts.bootstrap_permissions import ensure_system_user_exists

REPO_CACHE = {}

Expand Down Expand Up @@ -186,6 +189,21 @@ async def get_repositories_for_update(platform_name: str):
)


async def add_owner_id():
async with open_async_session(key=get_async_db_key()) as db:
system_user = await ensure_system_user_exists(db)
await db.execute(
update(models.Platform)
.where(models.Platform.owner_id.is_(None))
.values(owner_id=system_user.id)
)
await db.execute(
update(models.Repository)
.where(models.Repository.owner_id.is_(None))
.values(owner_id=system_user.id)
)


async def add_repositories_to_platform(
platform_data: dict, repositories_ids: typing.List[int]
):
Expand Down Expand Up @@ -347,6 +365,7 @@ def main():
"Repository %s sync is failed: \n%s", repository, str(e)
)
sync(add_repositories_to_platform(platform_data, repository_ids))
sync(add_owner_id())


if __name__ == "__main__":
Expand Down
35 changes: 34 additions & 1 deletion tests/test_api/test_platforms.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload

from alws.models import Platform, Repository
from tests.mock_classes import BaseAsyncTestCase


Expand All @@ -17,7 +22,7 @@ async def test_platform_create(self):
"url": "http://",
"type": "rpm",
"debug": False,
}
},
],
"data": {"test": "test"},
}
Expand All @@ -29,3 +34,31 @@ async def test_platform_create(self):
)
message = f"Cannot create platform:\n{response.text}"
assert response.status_code == self.status_codes.HTTP_200_OK, message

async def test_add_repositories_to_platform(
self,
base_platform,
repository_for_product,
async_session: AsyncSession,
):
payload = [repository_for_product.id]
response = await self.make_request(
"patch",
f"/api/v1/platforms/{base_platform.id}/add-repositories",
json=payload,
)
message = f"Cannot add repositories to the platform:\n{response.text}"
assert response.status_code == self.status_codes.HTTP_200_OK, message

resulting_repo = (
(
await async_session.execute(
select(Repository).where(
Repository.id == repository_for_product.id
)
)
)
.scalars()
.first()
)
assert resulting_repo.platform_id == base_platform.id

0 comments on commit 93084ad

Please sign in to comment.