golem-vm-provider 0.1.19__tar.gz → 0.1.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/PKG-INFO +1 -1
  2. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/multipass.py +4 -1
  3. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/proxy_manager.py +32 -23
  4. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/pyproject.toml +1 -1
  5. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/README.md +0 -0
  6. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/__init__.py +0 -0
  7. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/api/__init__.py +0 -0
  8. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/api/models.py +0 -0
  9. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/api/routes.py +0 -0
  10. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/config.py +0 -0
  11. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/discovery/__init__.py +0 -0
  12. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/discovery/advertiser.py +0 -0
  13. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/discovery/resource_tracker.py +0 -0
  14. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/main.py +0 -0
  15. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/network/port_verifier.py +0 -0
  16. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/security/ethereum.py +0 -0
  17. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/utils/ascii_art.py +0 -0
  18. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/utils/logging.py +0 -0
  19. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/utils/port_display.py +0 -0
  20. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/utils/retry.py +0 -0
  21. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/utils/setup.py +0 -0
  22. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/__init__.py +0 -0
  23. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/cloud_init.py +0 -0
  24. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/models.py +0 -0
  25. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/name_mapper.py +0 -0
  26. {golem_vm_provider-0.1.19 → golem_vm_provider-0.1.20}/provider/vm/port_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: golem-vm-provider
3
- Version: 0.1.19
3
+ Version: 0.1.20
4
4
  Summary: VM on Golem Provider Node - Run your own provider node to offer VMs on the Golem Network
5
5
  Keywords: golem,vm,provider,cloud,decentralized
6
6
  Author: Phillip Jensen
@@ -37,8 +37,11 @@ class MultipassProvider(VMProvider):
37
37
  self.vm_data_dir.mkdir(parents=True, exist_ok=True)
38
38
 
39
39
  # Initialize managers
40
- self.proxy_manager = PythonProxyManager(port_manager=port_manager)
41
40
  self.name_mapper = VMNameMapper(self.vm_data_dir / "vm_names.json")
41
+ self.proxy_manager = PythonProxyManager(
42
+ port_manager=port_manager,
43
+ name_mapper=self.name_mapper
44
+ )
42
45
 
43
46
  def _verify_installation(self) -> None:
44
47
  """Verify multipass is installed and get version."""
@@ -147,17 +147,20 @@ class PythonProxyManager:
147
147
  def __init__(
148
148
  self,
149
149
  port_manager: PortManager,
150
+ name_mapper: "VMNameMapper",
150
151
  state_file: Optional[str] = None
151
152
  ):
152
153
  """Initialize the proxy manager.
153
154
 
154
155
  Args:
155
156
  port_manager: Port allocation manager
157
+ name_mapper: VM name mapping manager
156
158
  state_file: Path to persist proxy state
157
159
  """
158
160
  self.port_manager = port_manager
161
+ self.name_mapper = name_mapper
159
162
  self.state_file = state_file or os.path.expanduser("~/.golem/provider/proxy_state.json")
160
- self._proxies: Dict[str, ProxyServer] = {} # vm_id -> ProxyServer
163
+ self._proxies: Dict[str, ProxyServer] = {} # multipass_name -> ProxyServer
161
164
  # Note: _load_state is now async and will be called explicitly during provider setup
162
165
 
163
166
  async def _load_state(self) -> None:
@@ -169,14 +172,19 @@ class PythonProxyManager:
169
172
  state = json.load(f)
170
173
  # Restore proxy servers from saved state
171
174
  restore_tasks = []
172
- for vm_id, proxy_info in state.items():
173
- # Create task to restore proxy
174
- task = self.add_vm(
175
- vm_id=vm_id,
176
- vm_ip=proxy_info['target'],
177
- port=proxy_info['port']
178
- )
179
- restore_tasks.append(task)
175
+ for requestor_name, proxy_info in state.items():
176
+ # Get current multipass name for the requestor's VM
177
+ multipass_name = await self.name_mapper.get_multipass_name(requestor_name)
178
+ if multipass_name:
179
+ # Create task to restore proxy
180
+ task = self.add_vm(
181
+ vm_id=multipass_name, # Use multipass name for internal tracking
182
+ vm_ip=proxy_info['target'],
183
+ port=proxy_info['port']
184
+ )
185
+ restore_tasks.append(task)
186
+ else:
187
+ logger.warning(f"No multipass name found for requestor VM {requestor_name}")
180
188
 
181
189
  # Wait for all proxies to be restored
182
190
  if restore_tasks:
@@ -186,16 +194,17 @@ class PythonProxyManager:
186
194
  except Exception as e:
187
195
  logger.error(f"Failed to load proxy state: {e}")
188
196
 
189
- def _save_state(self) -> None:
190
- """Save current proxy state to file."""
197
+ async def _save_state(self) -> None:
198
+ """Save current proxy state to file using requestor names."""
191
199
  try:
192
- state = {
193
- vm_id: {
194
- 'port': proxy.listen_port,
195
- 'target': proxy.target_host
196
- }
197
- for vm_id, proxy in self._proxies.items()
198
- }
200
+ state = {}
201
+ for multipass_name, proxy in self._proxies.items():
202
+ requestor_name = await self.name_mapper.get_requestor_name(multipass_name)
203
+ if requestor_name:
204
+ state[requestor_name] = {
205
+ 'port': proxy.listen_port,
206
+ 'target': proxy.target_host
207
+ }
199
208
  os.makedirs(os.path.dirname(self.state_file), exist_ok=True)
200
209
  with open(self.state_file, 'w') as f:
201
210
  json.dump(state, f)
@@ -206,7 +215,7 @@ class PythonProxyManager:
206
215
  """Add proxy configuration for a new VM.
207
216
 
208
217
  Args:
209
- vm_id: Unique identifier for the VM
218
+ vm_id: Unique identifier for the VM (multipass name)
210
219
  vm_ip: IP address of the VM
211
220
  port: Optional specific port to use, if not provided one will be allocated
212
221
 
@@ -226,7 +235,7 @@ class PythonProxyManager:
226
235
  await proxy.start()
227
236
 
228
237
  self._proxies[vm_id] = proxy
229
- self._save_state()
238
+ await self._save_state()
230
239
 
231
240
  logger.info(f"Started proxy for VM {vm_id} on port {port}")
232
241
  return True
@@ -242,14 +251,14 @@ class PythonProxyManager:
242
251
  """Remove proxy configuration for a VM.
243
252
 
244
253
  Args:
245
- vm_id: Unique identifier for the VM
254
+ vm_id: Unique identifier for the VM (multipass name)
246
255
  """
247
256
  try:
248
257
  if vm_id in self._proxies:
249
258
  proxy = self._proxies.pop(vm_id)
250
259
  await proxy.stop()
251
260
  self.port_manager.deallocate_port(vm_id)
252
- self._save_state()
261
+ await self._save_state()
253
262
  logger.info(f"Removed proxy for VM {vm_id}")
254
263
  except Exception as e:
255
264
  logger.error(f"Failed to remove proxy for VM {vm_id}: {e}")
@@ -270,7 +279,7 @@ class PythonProxyManager:
270
279
  cleanup_errors.append(f"Failed to remove proxy for VM {vm_id}: {e}")
271
280
 
272
281
  try:
273
- self._save_state()
282
+ await self._save_state()
274
283
  except Exception as e:
275
284
  cleanup_errors.append(f"Failed to save state: {e}")
276
285
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "golem-vm-provider"
3
- version = "0.1.19"
3
+ version = "0.1.20"
4
4
  description = "VM on Golem Provider Node - Run your own provider node to offer VMs on the Golem Network"
5
5
  authors = ["Phillip Jensen <phillip+vm-on-golem@golemgrid.com>"]
6
6
  readme = "README.md"