blob: 7aed795437e38e90d644ed5e6838f13aa483c516 [file] [log] [blame]
kdanylov aka koder84de1e42017-05-22 14:00:07 +03001import collections
koder aka kdanilovbbbe1dc2016-12-20 01:19:56 +02002from typing import List, Callable, Any, Dict, Optional, Set
koder aka kdanilov22d134e2016-11-08 11:33:19 +02003from concurrent.futures import ThreadPoolExecutor
4
kdanylov aka koderb0833332017-05-13 20:39:17 +03005from cephlib.istorage import IStorage
kdanylov aka koder026e5f22017-05-15 01:04:39 +03006from cephlib.node import NodeInfo, IRPCNode
7from cephlib.ssh import ConnCreds
kdanylov aka koder84de1e42017-05-22 14:00:07 +03008from cephlib.storage_selectors import DevRolesConfig
koder aka kdanilov22d134e2016-11-08 11:33:19 +02009
koder aka kdanilov39e449e2016-12-17 15:15:26 +020010from .openstack_api import OSCreds, OSConnection
koder aka kdanilov22d134e2016-11-08 11:33:19 +020011from .config import Config
koder aka kdanilov70227062016-11-26 23:23:21 +020012from .fuel_rest_api import Connection
kdanylov aka koder026e5f22017-05-15 01:04:39 +030013from .result_classes import IWallyStorage
koder aka kdanilov22d134e2016-11-08 11:33:19 +020014
15
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030016class TestRun:
17 """Test run information"""
kdanylov aka koder026e5f22017-05-15 01:04:39 +030018 def __init__(self, config: Config, storage: IStorage, rstorage: IWallyStorage) -> None:
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030019 # NodesInfo list
koder aka kdanilov962ee5f2016-12-19 02:40:08 +020020 self.nodes_info = {} # type: Dict[str, NodeInfo]
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030021
22 # Nodes list
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020023 self.nodes = [] # type: List[IRPCNode]
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030024
koder aka kdanilov22d134e2016-11-08 11:33:19 +020025 self.build_meta = {} # type: Dict[str,Any]
26 self.clear_calls_stack = [] # type: List[Callable[['TestRun'], None]]
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030027
28 # openstack credentials
koder aka kdanilov22d134e2016-11-08 11:33:19 +020029 self.fuel_openstack_creds = None # type: Optional[OSCreds]
koder aka kdanilov39e449e2016-12-17 15:15:26 +020030 self.fuel_version = None # type: Optional[List[int]]
koder aka kdanilov3d2bc4f2016-11-12 18:31:18 +020031 self.os_creds = None # type: Optional[OSCreds]
koder aka kdanilov73084622016-11-16 21:51:08 +020032 self.os_connection = None # type: Optional[OSConnection]
koder aka kdanilov70227062016-11-26 23:23:21 +020033 self.fuel_conn = None # type: Optional[Connection]
34 self.rpc_code = None # type: bytes
koder aka kdanilove7e1a4d2016-12-17 20:29:52 +020035 self.default_rpc_plugins = None # type: Dict[str, bytes]
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030036
koder aka kdanilov22d134e2016-11-08 11:33:19 +020037 self.storage = storage
kdanylov aka koderb0833332017-05-13 20:39:17 +030038 self.rstorage = rstorage
koder aka kdanilov22d134e2016-11-08 11:33:19 +020039 self.config = config
koder aka kdanilov70227062016-11-26 23:23:21 +020040 self.sensors_run_on = set() # type: Set[str]
koder aka kdanilov39e449e2016-12-17 15:15:26 +020041 self.os_spawned_nodes_ids = None # type: List[int]
kdanylov aka koder84de1e42017-05-22 14:00:07 +030042 self.devs_locator = [] # type: DevRolesConfig
koder aka kdanilov22d134e2016-11-08 11:33:19 +020043
44 def get_pool(self):
45 return ThreadPoolExecutor(self.config.get('worker_pool_sz', 32))
koder aka kdanilov3b4da8b2016-10-17 00:17:53 +030046
kdanylov aka kodercdfcdaf2017-04-29 10:03:39 +030047 def merge_node(self, creds: ConnCreds, roles: Set[str], **params) -> NodeInfo:
48 info = NodeInfo(creds, roles, params)
koder aka kdanilov108ac362017-01-19 20:17:16 +020049 nid = info.node_id
koder aka kdanilov962ee5f2016-12-19 02:40:08 +020050
51 if nid in self.nodes_info:
52 self.nodes_info[nid].roles.update(info.roles)
kdanylov aka kodercdfcdaf2017-04-29 10:03:39 +030053 self.nodes_info[nid].params.update(info.params)
koder aka kdanilov962ee5f2016-12-19 02:40:08 +020054 return self.nodes_info[nid]
55 else:
56 self.nodes_info[nid] = info
57 return info