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