Skip to content

Commit 2d3a943

Browse files
committed
refactor docker compiler
1 parent 146aa33 commit 2d3a943

File tree

1 file changed

+41
-12
lines changed

1 file changed

+41
-12
lines changed

seedemu/compiler/Docker.py

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,40 @@ def _importFile(self, path: str, hostpath: str) -> str:
802802
copyfile(hostpath, staged_path)
803803
return 'COPY {} {}\n'.format(staged_path, path)
804804

805+
806+
def computeNodeName(self, node ):
807+
"""
808+
@brief given a node, compute its final container name, as it will be known in the docker-compose file
809+
"""
810+
name = self.__naming_scheme.format(
811+
asn = node.getAsn(),
812+
role = self._nodeRoleToString(node.getRole()),
813+
name = node.getName(),
814+
displayName = node.getDisplayName() if node.getDisplayName() != None else node.getName(),
815+
primaryIp = node.getInterfaces()[0].getAddress()
816+
)
817+
818+
return sub(r'[^a-zA-Z0-9_.-]', '_', name)
819+
820+
def realNodeName(self, node):
821+
"""
822+
@brief computes the sub directory names inside the output folder
823+
824+
why is it distinct from computeNodeName() ?!
825+
"""
826+
(scope, type, _) = node.getRegistryInfo()
827+
prefix = self._contextToPrefix(scope, type)
828+
return '{}{}'.format(prefix, node.getName())
829+
830+
def realNetName(self,net):
831+
"""
832+
@brief computes name of a network as it will be known in the docker-compose file
833+
"""
834+
(netscope, _, _) = net.getRegistryInfo()
835+
net_prefix = self._contextToPrefix(netscope, 'net')
836+
if net.getType() == NetworkType.Bridge: net_prefix = ''
837+
return '{}{}'.format(net_prefix, net.getName())
838+
805839
def _compileNode(self, node: Node) -> str:
806840
"""!
807841
@brief Compile a single node. Will create folder for node and the
@@ -811,18 +845,14 @@ def _compileNode(self, node: Node) -> str:
811845
812846
@returns docker-compose service string.
813847
"""
814-
(scope, type, _) = node.getRegistryInfo()
815-
prefix = self._contextToPrefix(scope, type)
816-
real_nodename = '{}{}'.format(prefix, node.getName())
848+
real_nodename = self.realNodeName(node)
817849
node_nets = ''
818850
dummy_addr_map = ''
819851

820852
for iface in node.getInterfaces():
821853
net = iface.getNet()
822-
(netscope, _, _) = net.getRegistryInfo()
823-
net_prefix = self._contextToPrefix(netscope, 'net')
824-
if net.getType() == NetworkType.Bridge: net_prefix = ''
825-
real_netname = '{}{}'.format(net_prefix, net.getName())
854+
855+
real_netname = self.realNetName(net)
826856
address = iface.getAddress()
827857

828858
if self.__self_managed_network and net.getType() != NetworkType.Bridge:
@@ -891,6 +921,8 @@ def _compileNode(self, node: Node) -> str:
891921
volumeList = lst
892922
)
893923

924+
name = self.computeNodeName(node)
925+
894926
dockerfile = DockerCompilerFileTemplates['dockerfile']
895927
mkdir(real_nodename)
896928
chdir(real_nodename)
@@ -978,18 +1010,15 @@ def _compileNet(self, net: Network) -> str:
9781010
9791011
@returns docker-compose network string.
9801012
"""
981-
(scope, _, _) = net.getRegistryInfo()
9821013
if self.__self_managed_network and net.getType() != NetworkType.Bridge:
9831014
pfx = next(self.__dummy_network_pool)
9841015
net.setAttribute('dummy_prefix', pfx)
9851016
net.setAttribute('dummy_prefix_index', 2)
9861017
self._log('self-managed network: using dummy prefix {}'.format(pfx))
9871018

988-
net_prefix = self._contextToPrefix(scope, 'net')
989-
if net.getType() == NetworkType.Bridge: net_prefix = ''
990-
1019+
9911020
return DockerCompilerFileTemplates['compose_network'].format(
992-
netId = '{}{}'.format(net_prefix, net.getName()),
1021+
netId = self.realNetName(net),
9931022
prefix = net.getAttribute('dummy_prefix') if self.__self_managed_network and net.getType() != NetworkType.Bridge else net.getPrefix(),
9941023
mtu = net.getMtu(),
9951024
labelList = self._getNetMeta(net)

0 commit comments

Comments
 (0)