Coverage for ocp_resources/plan.py: 0%
36 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-30 10:48 +0200
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-30 10:48 +0200
1from __future__ import annotations
2from typing import Any
3from ocp_resources.resource import NamespacedResource
6class Plan(NamespacedResource):
7 """
8 Migration Tool for Virtualization (MTV) Plan Resource.
10 Args:
11 source_provider_name (str): MTV Source Provider CR name.
12 source_provider_namespace (str): MTV Source Provider CR namespace.
13 destination_provider_name (str): MTV Destination Provider CR name.
14 destination_provider_namespace (str): MTV Destination Provider CR namespace.
15 storage_map_name (str): MTV StorageMap CR name.
16 storage_map_namespace (str): MTV StorageMap CR namespace.
17 network_map_name (str): MTV NetworkMap CR name.
18 network_map_namespace (str): MTV NetworkMap CR CR namespace.
19 virtual_machines_list (list): A List of dicts, each contain
20 the Name Or Id of the source Virtual Machines to migrate.
21 Example: [ { "id": "vm-id-x" }, { "name": "vm-name-x" } ]
22 warm_migration (bool, default: False): Warm (True) or Cold (False) migration.
23 """
25 api_group = NamespacedResource.ApiGroup.FORKLIFT_KONVEYOR_IO
27 def __init__(
28 self,
29 source_provider_name: str | None = None,
30 source_provider_namespace: str | None = None,
31 destination_provider_name: str | None = None,
32 destination_provider_namespace: str | None = None,
33 storage_map_name: str | None = None,
34 storage_map_namespace: str | None = None,
35 network_map_name: str | None = None,
36 network_map_namespace: str | None = None,
37 virtual_machines_list: list[Any] | None = None,
38 target_namespace: str | None = None,
39 warm_migration: bool = False,
40 pre_hook_name: str | None = None,
41 pre_hook_namespace: str | None = None,
42 after_hook_name: str | None = None,
43 after_hook_namespace: str | None = None,
44 **kwargs,
45 ) -> None:
46 super().__init__(**kwargs)
47 self.source_provider_name = source_provider_name
48 self.source_provider_namespace = source_provider_namespace
49 self.destination_provider_name = destination_provider_name
50 self.destination_provider_namespace = destination_provider_namespace
51 self.storage_map_name = storage_map_name
52 self.storage_map_namespace = storage_map_namespace
53 self.network_map_name = network_map_name
54 self.network_map_namespace = network_map_namespace
55 self.virtual_machines_list = virtual_machines_list
56 self.warm_migration = warm_migration
57 self.pre_hook_name = pre_hook_name
58 self.pre_hook_namespace = pre_hook_namespace
59 self.after_hook_name = after_hook_name
60 self.after_hook_namespace = after_hook_namespace
61 self.target_namespace = target_namespace or self.namespace
62 self.hooks_array = []
64 if self.pre_hook_name and self.pre_hook_namespace:
65 self.hooks_array.append(
66 self._generate_hook_spec(
67 hook_name=self.pre_hook_name,
68 hook_namespace=self.pre_hook_namespace,
69 hook_type="PreHook",
70 )
71 )
73 if self.after_hook_name and self.after_hook_namespace:
74 self.hooks_array.append(
75 self._generate_hook_spec(
76 hook_name=self.after_hook_name,
77 hook_namespace=self.after_hook_namespace,
78 hook_type="AfterHook",
79 )
80 )
82 if self.hooks_array and self.virtual_machines_list:
83 for vm in self.virtual_machines_list:
84 vm["hooks"] = self.hooks_array
86 def to_dict(self) -> None:
87 super().to_dict()
88 if not self.kind_dict and not self.yaml_file:
89 self.res.update({
90 "spec": {
91 "warm": self.warm_migration,
92 "targetNamespace": self.target_namespace,
93 "map": {
94 "storage": {
95 "name": self.storage_map_name,
96 "namespace": self.storage_map_namespace,
97 },
98 "network": {
99 "name": self.network_map_name,
100 "namespace": self.network_map_namespace,
101 },
102 },
103 "vms": self.virtual_machines_list,
104 "provider": {
105 "source": {
106 "name": self.source_provider_name,
107 "namespace": self.source_provider_namespace,
108 },
109 "destination": {
110 "name": self.destination_provider_name,
111 "namespace": self.destination_provider_namespace,
112 },
113 },
114 }
115 })
117 def _generate_hook_spec(self, hook_name: str, hook_namespace: str, hook_type: str) -> dict[str, Any]:
118 return {
119 "hook": {
120 "name": hook_name,
121 "namespace": hook_namespace,
122 },
123 "step": hook_type,
124 }