koder aka kdanilov | bbbe1dc | 2016-12-20 01:19:56 +0200 | [diff] [blame] | 1 | from typing import List, Callable, Any, Dict, Optional, Set |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 2 | from concurrent.futures import ThreadPoolExecutor |
| 3 | |
kdanylov aka koder | b083333 | 2017-05-13 20:39:17 +0300 | [diff] [blame] | 4 | from cephlib.istorage import IStorage |
kdanylov aka koder | 026e5f2 | 2017-05-15 01:04:39 +0300 | [diff] [blame] | 5 | from cephlib.node import NodeInfo, IRPCNode |
| 6 | from cephlib.ssh import ConnCreds |
kdanylov aka koder | 84de1e4 | 2017-05-22 14:00:07 +0300 | [diff] [blame] | 7 | from cephlib.storage_selectors import DevRolesConfig |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 8 | |
koder aka kdanilov | 39e449e | 2016-12-17 15:15:26 +0200 | [diff] [blame] | 9 | from .openstack_api import OSCreds, OSConnection |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 10 | from .config import Config |
kdanylov aka koder | 026e5f2 | 2017-05-15 01:04:39 +0300 | [diff] [blame] | 11 | from .result_classes import IWallyStorage |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 12 | |
| 13 | |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 14 | class TestRun: |
| 15 | """Test run information""" |
kdanylov aka koder | 026e5f2 | 2017-05-15 01:04:39 +0300 | [diff] [blame] | 16 | def __init__(self, config: Config, storage: IStorage, rstorage: IWallyStorage) -> None: |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 17 | # NodesInfo list |
kdanylov aka koder | 13e5845 | 2018-07-15 02:51:51 +0300 | [diff] [blame] | 18 | self.nodes_info: Dict[str, NodeInfo] = {} |
| 19 | |
| 20 | self.ceph_master_node: Optional[IRPCNode] = None |
| 21 | self.ceph_extra_args: Optional[str] = None |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 22 | |
| 23 | # Nodes list |
kdanylov aka koder | 13e5845 | 2018-07-15 02:51:51 +0300 | [diff] [blame] | 24 | self.nodes: List[IRPCNode] = [] |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 25 | |
kdanylov aka koder | 13e5845 | 2018-07-15 02:51:51 +0300 | [diff] [blame] | 26 | self.build_meta: Dict[str,Any] = {} |
| 27 | self.clear_calls_stack: List[Callable[['TestRun'], None]] = [] |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 28 | |
| 29 | # openstack credentials |
kdanylov aka koder | 13e5845 | 2018-07-15 02:51:51 +0300 | [diff] [blame] | 30 | self.os_creds: Optional[OSCreds] = None # type: ignore |
| 31 | self.os_connection: Optional[OSConnection] = None # type: ignore |
| 32 | self.rpc_code: bytes = None # type: ignore |
| 33 | self.default_rpc_plugins: Dict[str, bytes] = None # type: ignore |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 34 | |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 35 | self.storage = storage |
kdanylov aka koder | b083333 | 2017-05-13 20:39:17 +0300 | [diff] [blame] | 36 | self.rstorage = rstorage |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 37 | self.config = config |
kdanylov aka koder | 13e5845 | 2018-07-15 02:51:51 +0300 | [diff] [blame] | 38 | self.sensors_run_on: Set[str] = set() |
| 39 | self.os_spawned_nodes_ids: List[int] = None # type: ignore |
| 40 | self.devs_locator: DevRolesConfig = [] |
koder aka kdanilov | 22d134e | 2016-11-08 11:33:19 +0200 | [diff] [blame] | 41 | |
| 42 | def get_pool(self): |
| 43 | return ThreadPoolExecutor(self.config.get('worker_pool_sz', 32)) |
koder aka kdanilov | 3b4da8b | 2016-10-17 00:17:53 +0300 | [diff] [blame] | 44 | |
kdanylov aka koder | cdfcdaf | 2017-04-29 10:03:39 +0300 | [diff] [blame] | 45 | def merge_node(self, creds: ConnCreds, roles: Set[str], **params) -> NodeInfo: |
| 46 | info = NodeInfo(creds, roles, params) |
koder aka kdanilov | 108ac36 | 2017-01-19 20:17:16 +0200 | [diff] [blame] | 47 | nid = info.node_id |
koder aka kdanilov | 962ee5f | 2016-12-19 02:40:08 +0200 | [diff] [blame] | 48 | |
| 49 | if nid in self.nodes_info: |
| 50 | self.nodes_info[nid].roles.update(info.roles) |
kdanylov aka koder | cdfcdaf | 2017-04-29 10:03:39 +0300 | [diff] [blame] | 51 | self.nodes_info[nid].params.update(info.params) |
koder aka kdanilov | 962ee5f | 2016-12-19 02:40:08 +0200 | [diff] [blame] | 52 | return self.nodes_info[nid] |
| 53 | else: |
| 54 | self.nodes_info[nid] = info |
| 55 | return info |