Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions sonic_package_manager/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ class PackageEntry:
built_in: Boolean flag whether the package is built in.
image_id: Image ID for this package or None if package
is not installed.
docker_image_reference: Docker image reference for this package or None if package
is not installed.
tag: Tag for this package or None if package is not installed.
"""

name: str
Expand All @@ -43,7 +42,7 @@ class PackageEntry:
installed: bool = False
built_in: bool = False
image_id: Optional[str] = None
docker_image_reference: Optional[str] = None
tag: Optional[str] = None


def package_from_dict(name: str, package_info: Dict) -> PackageEntry:
Expand All @@ -58,10 +57,10 @@ def package_from_dict(name: str, package_info: Dict) -> PackageEntry:
installed = package_info.get('installed', False)
built_in = package_info.get('built-in', False)
image_id = package_info.get('image-id')
docker_image_reference = package_info.get('docker-image-reference')
tag = package_info.get('tag')
return PackageEntry(name, repository, description,
default_reference, version, installed,
built_in, image_id, docker_image_reference)
built_in, image_id, tag)


def package_to_dict(package: PackageEntry) -> Dict:
Expand All @@ -75,7 +74,7 @@ def package_to_dict(package: PackageEntry) -> Dict:
'installed': package.installed,
'built-in': package.built_in,
'image-id': package.image_id,
'docker-image-reference': package.docker_image_reference,
'tag': package.tag,
}


Expand Down
2 changes: 1 addition & 1 deletion sonic_package_manager/service_creator/creator.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ def generate_container_mgmt(self, package: Package):
'docker_container_name': name,
'docker_image_id': image_id,
'docker_image_name': package.entry.repository,
'docker_image_reference': package.entry.docker_image_reference,
'docker_image_tag': package.entry.tag,
'docker_image_run_opt': run_opt,
'sonic_asic_platform': sonic_asic_platform
}
Expand Down
6 changes: 3 additions & 3 deletions sonic_package_manager/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ def install(self, package: Package):

image = self.install_image(package)
package.entry.image_id = image.id
if image.docker_image_references:
package.entry.docker_image_reference = image.docker_image_references[0]
if image.tags:
package.entry.tag = image.tags[0]
else:
package.entry.docker_image_reference = image.id
package.entry.tag = image.id

# if no repository is defined for this package
# get repository from image
Expand Down
2 changes: 1 addition & 1 deletion tests/sonic_package_manager/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def mock_docker_api():
@dataclass
class Image:
id: str
docker_image_references: list[str]
tags: list[str]

@property
def attrs(self):
Expand Down
6 changes: 3 additions & 3 deletions tests/sonic_package_manager/test_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def test_package_from_dict():
'installed': True,
'built-in': False,
'image-id': 'abc123',
'docker-image-reference': 'latest'
'tag': 'latest'
}

package = package_from_dict('test-package', package_info)
Expand All @@ -112,7 +112,7 @@ def test_package_from_dict():
assert package.installed is True
assert package.built_in is False
assert package.image_id == 'abc123'
assert package.docker_image_reference == 'latest'
assert package.tag == 'latest'


def test_package_from_dict_minimal():
Expand All @@ -131,4 +131,4 @@ def test_package_from_dict_minimal():
assert package.installed is False
assert package.built_in is False
assert package.image_id is None
assert package.docker_image_reference is None
assert package.tag is None
12 changes: 6 additions & 6 deletions tests/sonic_package_manager/test_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -602,21 +602,21 @@ def test_download_file_sftp(package_manager):
)


def test_installation_from_file_no_image_references(package_manager, mock_docker_api, sonic_fs):
# Override the load function to return an image without image references
def load_no_image_references(filename):
def test_installation_from_file_no_tags(package_manager, mock_docker_api, sonic_fs):
# Override the load function to return an image without tags
def load_no_tags(filename):
class Image:
def __init__(self, id):
self.id = id
self.docker_image_references = []
self.tags = []

@property
def attrs(self):
return {'RepoTags': []}

return Image(filename)

mock_docker_api.load = MagicMock(side_effect=load_no_image_references)
mock_docker_api.load = MagicMock(side_effect=load_no_tags)

sonic_fs.create_file('Azure/docker-test:1.6.0')
package_manager.install(tarball='Azure/docker-test:1.6.0')
Expand All @@ -626,4 +626,4 @@ def attrs(self):

# Get the package from the database and verify the tag was set to the image ID
package = package_manager.database.get_package('test-package')
assert package.docker_image_reference == 'Azure/docker-test:1.6.0'
assert package.tag == 'Azure/docker-test:1.6.0'
Loading