Skip to content

Commit

Permalink
Address resolvation only when running statement directly
Browse files Browse the repository at this point in the history
  • Loading branch information
raulikak committed May 7, 2024
1 parent 967e25d commit 6e13224
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
27 changes: 27 additions & 0 deletions tcsfw/address_resolver.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""Address resolver"""

import os
from typing import List
from tcsfw.address import DNSName
from tcsfw.command_basics import read_env_file
from tcsfw.entity import SafeNameMap
from tcsfw.main import ConfigurationException
from tcsfw.model import Addressable


class AddressResolver:
"""Address resolver"""
def __init__(self):
self.safe_names = SafeNameMap(prefix="SUT_")
self.addresses_for: List[Addressable] = []

def require(self):
"""Require the addresses for entities"""
env = read_env_file()
for nb in self.addresses_for:
env_name = self.safe_names.get_env_name(nb.entity)
value = os.environ.get(env_name) or env.get(env_name)
if not value:
raise ConfigurationException(f"Environment variable {env_name} not defined for {nb.entity.long_name()}")
address = DNSName.name_or_ip(value)
nb.entity.addresses.add(address)
20 changes: 7 additions & 13 deletions tcsfw/builder_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,20 @@
import ipaddress
import json
import logging
import os
import pathlib
import sys
from typing import Any, Callable, Dict, List, Optional, Self, Tuple, Union

from tcsfw.address import (Addresses, AnyAddress, DNSName, EndpointAddress, HWAddress,
HWAddresses, IPAddress, IPAddresses, Protocol)
from tcsfw.address_resolver import AddressResolver
from tcsfw.basics import ConnectionType, ExternalActivity, HostType, Status
from tcsfw.batch_import import BatchImporter, LabelFilter
from tcsfw.claim_coverage import RequirementClaimMapper
from tcsfw.client_api import APIRequest, ClientPrompt
from tcsfw.command_basics import read_env_file
from tcsfw.components import CookieData, Cookies, DataReference, DataStorages, Software
from tcsfw.coverage_result import CoverageReport
from tcsfw.entity import ClaimAuthority, Entity, SafeNameMap
from tcsfw.entity import ClaimAuthority, Entity
from tcsfw.event_interface import PropertyEvent
from tcsfw.release_info import ReleaseInfo
from tcsfw.http_server import HTTPServerRunner
Expand Down Expand Up @@ -56,7 +55,7 @@ def __init__(self, name="Unnamed system"):
self.visualizer = Visualizer()
self.loaders: List[EvidenceLoader] = []
self.protocols: Dict[Any, 'ProtocolBackend'] = {}
self.safe_names = SafeNameMap(prefix="SUT_")
self.address_resolver = AddressResolver()

def network(self, mask: str) -> Self:
self.network_masks.append(ipaddress.ip_network(mask))
Expand Down Expand Up @@ -126,14 +125,7 @@ def online_resource(self, key: str, url: str) -> Self:
return self

def require(self, addresses_for: List['NodeBuilder']):
env = read_env_file()
for nb in addresses_for:
env_name = self.safe_names.get_env_name(nb.entity)
value = env.get(env_name) or os.environ.get(env_name)
if not value:
raise ConfigurationException(f"Environment variable {env_name} not defined for {nb.entity.long_name()}")
address = DNSName.name_or_ip(value)
nb.entity.addresses.add(address)
self.address_resolver.addresses_for.extend(addresses_for)

def visualize(self) -> 'VisualizerBackend':
return VisualizerBackend(self.visualizer)
Expand Down Expand Up @@ -183,8 +175,10 @@ def _free_host_name(self, name_base: str) -> str:

def finish_(self):
"""Finish the model"""
# get the missing addresses
self.address_resolver.require()

# We want to have a authenticator related to each authenticated service
return
# NOTE: Not ready to go into this level now...
# auth_map = DataUsage.map_authenticators(self.system, {})
# for hb in self.hosts_by_name.values():
Expand Down

0 comments on commit 6e13224

Please sign in to comment.