def _br_conf(self, topo_id, topo, base): for k, _ in topo.get("border_routers", {}).items(): disp_id = k image = docker_image(self.args, 'border') if FEATURE_HEADER_V2 in self.args.features: image = docker_image(self.args, 'border-router') entry = { 'image': image, 'container_name': self.prefix + k, 'depends_on': [ 'scion_disp_%s' % disp_id, ], 'network_mode': 'service:scion_disp_%s' % disp_id, 'user': self.user, 'volumes': [ self._disp_vol(disp_id), '%s:/share/conf:ro' % os.path.join(base, k) ], 'command': [] } self.dc_conf['services']['scion_%s' % k] = entry
def _sciond_conf(self, topo_id, base): name = sciond_svc_name(topo_id) net = self.elem_networks["sd" + topo_id.file_fmt()][0] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' ip = str(net[ipv]) disp_id = 'cs%s-1' % topo_id.file_fmt() entry = { 'extra_hosts': ['jaeger:%s' % docker_host(self.args.docker)], 'image': docker_image(self.args, 'daemon'), 'container_name': '%ssd%s' % (self.prefix, topo_id.file_fmt()), 'depends_on': ['scion_disp_%s' % disp_id], 'user': self.user, 'volumes': [ self._disp_vol(disp_id), self._cache_vol(), self._certs_vol(), '%s:/share/conf:ro' % base ], 'networks': { self.bridges[net['net']]: { '%s_address' % ipv: ip } }, 'command': ['--config', '/share/conf/sd.toml'], } self.dc_conf['services'][name] = entry
def _br_conf(self, topo_id, topo, base): for k, _ in topo.get("border_routers", {}).items(): disp_id = k image = docker_image(self.args, 'posix-router') entry = { 'image': image, 'container_name': self.prefix + k, 'depends_on': [ 'scion_disp_%s' % disp_id, ], 'network_mode': 'service:scion_disp_%s' % disp_id, 'user': self.user, 'volumes': [self._disp_vol(disp_id), '%s:/share/conf:ro' % base], 'environment': { 'SCION_EXPERIMENTAL_BFD_DETECT_MULT': '${SCION_EXPERIMENTAL_BFD_DETECT_MULT}', 'SCION_EXPERIMENTAL_BFD_DESIRED_MIN_TX': '${SCION_EXPERIMENTAL_BFD_DESIRED_MIN_TX}', 'SCION_EXPERIMENTAL_BFD_REQUIRED_MIN_RX': '${SCION_EXPERIMENTAL_BFD_REQUIRED_MIN_RX}', }, 'command': ['--config', '/share/conf/%s.toml' % k] } self.dc_conf['services']['scion_%s' % k] = entry
def _sciond_conf(self, topo_id, base): name = sciond_svc_name(topo_id) net = self.elem_networks["sd" + topo_id.file_fmt()][0] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' ip = str(net[ipv]) disp_id = 'cs%s-1' % topo_id.file_fmt() entry = { 'image': docker_image(self.args, 'sciond'), 'container_name': '%ssd%s' % (self.prefix, topo_id.file_fmt()), 'depends_on': ['scion_disp_%s' % disp_id], 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, 'volumes': [ *DOCKER_USR_VOL, self._disp_vol(disp_id), self._cache_vol(), self._logs_vol(), self._certs_vol(), '%s:/share/conf:ro' % os.path.join(base, 'endhost'), ], 'networks': { self.bridges[net['net']]: { '%s_address' % ipv: ip } } } self.dc_conf['services'][name] = entry
def _dispatcher_conf(self, topo_id, topo, base): image = 'dispatcher' base_entry = { 'image': docker_image(self.args, image), 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, 'networks': {}, 'volumes': [*DOCKER_USR_VOL, self._logs_vol()] } keys = list(topo.get("border_routers", {})) + list( topo.get("control_service", {})) for disp_id in keys: entry = copy.deepcopy(base_entry) net_key = disp_id if disp_id.startswith('br'): net_key += '_ctrl' net = self.elem_networks[net_key][0] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' ip = str(net[ipv]) entry['networks'][self.bridges[net['net']]] = { '%s_address' % ipv: ip } entry['container_name'] = '%sdisp_%s' % (self.prefix, disp_id) entry['volumes'].append(self._disp_vol(disp_id)) conf = '%s:/share/conf:rw' % os.path.join(base, 'disp_%s' % disp_id) entry['volumes'].append(conf) self.dc_conf['services']['scion_disp_%s' % disp_id] = entry self.dc_conf['volumes'][self._disp_vol(disp_id).split(':') [0]] = None
def _dispatcher_conf(self, topo_id, topo, base): image = 'dispatcher' base_entry = { 'extra_hosts': ['jaeger:%s' % docker_host(self.args.docker)], 'image': docker_image(self.args, image), 'networks': {}, 'user': self.user, 'volumes': [], 'depends_on': { 'utils_chowner': { 'condition': 'service_started' }, }, } keys = (list(topo.get("border_routers", {})) + list(topo.get("control_service", {})) + ["tester_%s" % topo_id.file_fmt()]) for disp_id in keys: entry = copy.deepcopy(base_entry) net_key = disp_id if disp_id.startswith('br'): net_key = disp_id + '_internal' # add data networks: for net in self.elem_networks[disp_id]: ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' entry['networks'][self.bridges[net['net']]] = { '%s_address' % ipv: str(net[ipv]) } net = self.elem_networks[net_key][0] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' ip = str(net[ipv]) entry['networks'][self.bridges[net['net']]] = { '%s_address' % ipv: ip } entry['container_name'] = '%sdisp_%s' % (self.prefix, disp_id) entry['volumes'].append(self._disp_vol(disp_id)) conf = '%s:/share/conf:rw' % base entry['volumes'].append(conf) entry['command'] = [ '--config', '/share/conf/disp_%s.toml' % disp_id ] self.dc_conf['services']['scion_disp_%s' % disp_id] = entry self.dc_conf['volumes'][self._disp_vol(disp_id).split(':') [0]] = None
def _control_service_conf(self, topo_id, topo, base): for k in topo.get("control_service", {}).keys(): entry = { 'image': docker_image(self.args, 'control'), 'container_name': self.prefix + k, 'depends_on': ['scion_disp_%s' % k], 'network_mode': 'service:scion_disp_%s' % k, 'user': self.user, 'volumes': [ self._cache_vol(), self._certs_vol(), '%s:/share/conf:ro' % base, self._disp_vol(k), ], 'command': ['--config', '/share/conf/%s.toml' % k] } self.dc_conf['services']['scion_%s' % k] = entry
def _control_service_conf(self, topo_id, topo, base): for k, v in topo.get("control_service", {}).items(): entry = { 'image': docker_image(self.args, 'cs'), 'container_name': self.prefix + k, 'depends_on': ['scion_disp_%s' % k], 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, 'network_mode': 'service:scion_disp_%s' % k, 'volumes': [ *DOCKER_USR_VOL, self._cache_vol(), self._certs_vol(), '%s:/share/conf:ro' % os.path.join(base, k), self._disp_vol(k), ], 'command': [] } self.dc_conf['services']['scion_%s' % k] = entry
def _test_conf(self, topo_id): cntr_base = '/share' name = 'tester_%s' % topo_id.file_fmt() entry = { 'image': docker_image(self.args, 'tester'), 'container_name': 'tester_%s' % topo_id.file_fmt(), 'depends_on': ['scion_disp_%s' % name], 'privileged': True, 'entrypoint': 'sh tester.sh', 'environment': {}, # 'user': self.user, 'volumes': [ 'vol_scion_disp_%s:/run/shm/dispatcher:rw' % name, self.output_base + '/logs:' + cntr_base + '/logs:rw', self.output_base + '/gen:' + cntr_base + '/gen:rw', self.output_base + '/gen-certs:' + cntr_base + '/gen-certs:rw' ], 'network_mode': 'service:scion_disp_%s' % name, } net = self.args.networks[name][0] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' disp_net = self.args.networks[name][0] entry['environment']['SCION_LOCAL_ADDR'] = str(disp_net[ipv]) sciond_net = self.args.networks['sd%s' % topo_id.file_fmt()][0] entry['environment']['SCION_DAEMON'] = '%s:30255' % sciond_net[ipv] if self.args.sig: # If the tester container needs to communicate to the SIG, it needs the SIG_IP and # REMOTE_NETS which are the remote subnets that need to be routed through the SIG. # net information for the connected SIG sig_net = self.args.networks['sig%s' % topo_id.file_fmt()][0] entry['environment']['SIG_IP'] = str(sig_net[ipv]) entry['environment']['REMOTE_NETS'] = remote_nets( self.args.networks, topo_id) self.dc_conf['services'][name] = entry
def _dispatcher_conf(self, topo_id, topo, base): image = 'dispatcher' base_entry = { 'extra_hosts': ['jaeger:%s' % docker_host(self.args.docker)], 'image': docker_image(self.args, image), 'networks': {}, 'user': self.user, 'volumes': [], } keys = list(topo.get("border_routers", {})) + list( topo.get("control_service", {})) for disp_id in keys: entry = copy.deepcopy(base_entry) net_key = disp_id if disp_id.startswith('br'): net_key = disp_id + '_ctrl' # add data networks: for net in self.elem_networks[disp_id]: ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' entry['networks'][self.bridges[net['net']]] = { '%s_address' % ipv: str(net[ipv]) } net = self.elem_networks[net_key][0] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' ip = str(net[ipv]) entry['networks'][self.bridges[net['net']]] = { '%s_address' % ipv: ip } entry['container_name'] = '%sdisp_%s' % (self.prefix, disp_id) entry['volumes'].append(self._disp_vol(disp_id)) conf = '%s:/share/conf:rw' % os.path.join(base, 'disp_%s' % disp_id) entry['volumes'].append(conf) self.dc_conf['services']['scion_disp_%s' % disp_id] = entry self.dc_conf['volumes'][self._disp_vol(disp_id).split(':') [0]] = None
def _br_conf(self, topo_id, topo, base): for k, _ in topo.get("border_routers", {}).items(): disp_id = k entry = { 'image': docker_image(self.args, 'border'), 'container_name': self.prefix + k, 'depends_on': [ 'scion_disp_%s' % disp_id, ], 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, 'networks': {}, 'volumes': [ *DOCKER_USR_VOL, self._disp_vol(disp_id), self._logs_vol(), '%s:/share/conf:ro' % os.path.join(base, k) ], 'command': [] } # Set BR IPs in_net = self.elem_networks[k + "_internal"][0] ipv = 'ipv4' if ipv not in in_net: ipv = 'ipv6' entry['networks'][self.bridges[in_net['net']]] = { '%s_address' % ipv: str(in_net[ipv]) } for net in self.elem_networks[k]: ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' entry['networks'][self.bridges[net['net']]] = { '%s_address' % ipv: str(net[ipv]) } self.dc_conf['services']['scion_%s' % k] = entry
def _test_conf(self, topo_id): cntr_base = '/share' name = 'tester_%s' % topo_id.file_fmt() entry = { 'extra_hosts': ['jaeger:%s' % docker_host(self.args.docker)], 'image': docker_image(self.args, 'tester'), 'container_name': 'tester_%s' % topo_id.file_fmt(), 'privileged': True, 'entrypoint': 'sh tester.sh', 'environment': {}, # 'user': self.user, 'volumes': [ 'vol_scion_disp_cs%s-1:/run/shm/dispatcher:rw' % topo_id.file_fmt(), self.output_base + '/logs:' + cntr_base + '/logs:rw', self.output_base + '/gen:' + cntr_base + '/gen:rw', self.output_base + '/gen-certs:' + cntr_base + '/gen-certs:rw' ], 'networks': {} } net = self.args.networks[name][0] bridge = self.args.bridges[net['net']] ipv = 'ipv4' if ipv not in net: ipv = 'ipv6' entry['networks'][bridge] = {'%s_address' % ipv: str(net[ipv])} if self.args.sig: # If the tester container needs to communicate to the SIG, it needs the SIG_IP and # REMOTE_NETS which are the remote subnets that need to be routed through the SIG. # net information for the connected SIG sig_net = self.args.networks['sig%s' % topo_id.file_fmt()][0] entry['environment']['SIG_IP'] = str(sig_net[ipv]) entry['environment']['REMOTE_NETS'] = remote_nets( self.args.networks, topo_id) self.dc_conf['services'][name] = entry