Skip to content

Commit 364f639

Browse files
committed
Expanding the manifest capabilities to include
ports forwarding as well as docker network type configuration
1 parent 7f8779d commit 364f639

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

sonic_package_manager/manifest.py

+2
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ def unmarshal(self, value):
213213
ManifestRoot('container', [
214214
ManifestField('privileged', DefaultMarshaller(bool), False),
215215
ManifestArray('volumes', DefaultMarshaller(str)),
216+
ManifestField('network', DefaultMarshaller(str), None),
217+
ManifestArray('ports', DefaultMarshaller(str)),
216218
ManifestArray('mounts', ManifestRoot('mounts', [
217219
ManifestField('source', DefaultMarshaller(str)),
218220
ManifestField('target', DefaultMarshaller(str)),

sonic_package_manager/service_creator/creator.py

+12
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ def generate_container_mgmt(self, package: Package):
222222
image_id = package.image_id
223223
name = package.manifest['service']['name']
224224
container_spec = package.manifest['container']
225+
is_asic_service = package.manifest['service']['asic-service']
225226
script_path = os.path.join(DOCKER_CTL_SCRIPT_LOCATION, f'{name}.sh')
226227
script_template = get_tmpl_path(DOCKER_CTL_SCRIPT_TEMPLATE)
227228
run_opt = []
@@ -231,6 +232,17 @@ def generate_container_mgmt(self, package: Package):
231232

232233
run_opt.append('-t')
233234

235+
if not is_asic_service:
236+
if container_spec['network']:
237+
docker_network_type = container_spec['network']
238+
run_opt.append(f'--net={docker_network_type}')
239+
else:
240+
if container_spec['network']:
241+
raise ServiceCreatorError(f"Invalid Configuration, asic-service must not contain network type")
242+
243+
for port in container_spec['ports']:
244+
run_opt.append(f'--publish {port}')
245+
234246
for volume in container_spec['volumes']:
235247
run_opt.append(f'-v {volume}')
236248

tests/sonic_package_manager/test_service_creator.py

+15
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ def manifest():
4343
},
4444
'container': {
4545
'privileged': True,
46+
'network': 'bridge',
47+
'ports': [
48+
"8080:8080"
49+
],
4650
'volumes': [
4751
'/etc/sonic:/etc/sonic:ro'
4852
]
@@ -114,6 +118,17 @@ def read_file(name):
114118
assert read_file('test_reconcile') == 'test-process test-process-3'
115119

116120

121+
def test_service_creator_asic_service_network_type_err(sonic_fs, manifest, service_creator, package_manager):
122+
new_manifest = copy.deepcopy(manifest)
123+
new_manifest['service']['asic-service'] = True
124+
entry = PackageEntry('test', 'azure/sonic-test')
125+
package = Package(entry, Metadata(new_manifest))
126+
installed_packages = package_manager._get_installed_packages_and(package)
127+
128+
with pytest.raises(ServiceCreatorError) as e:
129+
service_creator.create(package)
130+
131+
117132
def test_service_creator_with_timer_unit(sonic_fs, manifest, service_creator):
118133
entry = PackageEntry('test', 'azure/sonic-test')
119134
package = Package(entry, Metadata(manifest))

0 commit comments

Comments
 (0)