golem-vm-provider 0.1.0__tar.gz → 0.1.1__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 (25) hide show
  1. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/PKG-INFO +1 -1
  2. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/main.py +124 -1
  3. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/pyproject.toml +1 -1
  4. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/README.md +0 -0
  5. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/__init__.py +0 -0
  6. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/api/__init__.py +0 -0
  7. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/api/models.py +0 -0
  8. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/api/routes.py +0 -0
  9. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/config.py +0 -0
  10. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/discovery/__init__.py +0 -0
  11. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/discovery/advertiser.py +0 -0
  12. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/discovery/resource_tracker.py +0 -0
  13. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/network/port_verifier.py +0 -0
  14. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/security/ethereum.py +0 -0
  15. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/utils/ascii_art.py +0 -0
  16. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/utils/logging.py +0 -0
  17. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/utils/port_display.py +0 -0
  18. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/utils/retry.py +0 -0
  19. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/__init__.py +0 -0
  20. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/cloud_init.py +0 -0
  21. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/models.py +0 -0
  22. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/multipass.py +0 -0
  23. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/name_mapper.py +0 -0
  24. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/port_manager.py +0 -0
  25. {golem_vm_provider-0.1.0 → golem_vm_provider-0.1.1}/provider/vm/proxy_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: golem-vm-provider
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: VM on Golem Provider Node - Run your own provider node to offer VMs on the Golem Network
5
5
  Home-page: https://github.com/cryptobench/vm-on-golem
6
6
  Keywords: golem,vm,provider,cloud,decentralized
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import os
2
3
  from fastapi import FastAPI
3
4
  from typing import Optional
4
5
 
@@ -122,4 +123,126 @@ from .api import routes
122
123
  app.include_router(routes.router, prefix="/api/v1")
123
124
 
124
125
  # Export app for uvicorn
125
- __all__ = ["app"]
126
+ __all__ = ["app", "start"]
127
+
128
+ def check_requirements():
129
+ """Check if all requirements are met."""
130
+ import os
131
+ from pathlib import Path
132
+
133
+ # Check if multipass is installed
134
+ multipass_path = os.environ.get('GOLEM_PROVIDER_MULTIPASS_BINARY_PATH', '/usr/local/bin/multipass')
135
+ if not Path(multipass_path).exists():
136
+ logger.error(f"Multipass binary not found at {multipass_path}")
137
+ return False
138
+
139
+ # Check required directories
140
+ vm_data_dir = os.environ.get(
141
+ 'GOLEM_PROVIDER_VM_DATA_DIR',
142
+ str(Path.home() / '.golem' / 'provider' / 'vms')
143
+ )
144
+ ssh_key_dir = os.environ.get(
145
+ 'GOLEM_PROVIDER_SSH_KEY_DIR',
146
+ str(Path.home() / '.golem' / 'provider' / 'ssh')
147
+ )
148
+ proxy_state_dir = os.environ.get(
149
+ 'GOLEM_PROVIDER_PROXY_STATE_DIR',
150
+ str(Path.home() / '.golem' / 'provider' / 'proxy')
151
+ )
152
+
153
+ try:
154
+ # Create and secure directories
155
+ for directory in [vm_data_dir, ssh_key_dir, proxy_state_dir]:
156
+ path = Path(directory)
157
+ path.mkdir(parents=True, exist_ok=True)
158
+ if directory == ssh_key_dir:
159
+ path.chmod(0o700) # Secure permissions for SSH keys
160
+ except Exception as e:
161
+ logger.error(f"Failed to create required directories: {e}")
162
+ return False
163
+
164
+ return True
165
+
166
+ async def verify_ports():
167
+ """Verify port accessibility before starting server."""
168
+ from .vm.port_manager import PortManager
169
+ from .utils.port_display import PortVerificationDisplay
170
+ from .config import settings
171
+
172
+ display = PortVerificationDisplay(
173
+ provider_port=settings.PORT,
174
+ port_range_start=settings.PORT_RANGE_START,
175
+ port_range_end=settings.PORT_RANGE_END
176
+ )
177
+ display.print_header()
178
+
179
+ # Initialize port manager
180
+ logger.process("🔄 Verifying port accessibility...")
181
+ port_manager = PortManager(
182
+ start_port=settings.PORT_RANGE_START,
183
+ end_port=settings.PORT_RANGE_END,
184
+ discovery_port=settings.PORT
185
+ )
186
+ if not await port_manager.initialize():
187
+ logger.error("Port verification failed. Please ensure:")
188
+ logger.error(f"1. Port {settings.PORT} is accessible for provider access")
189
+ logger.error(f"2. Some ports in range {settings.PORT_RANGE_START}-{settings.PORT_RANGE_END} are accessible for VM access")
190
+ logger.error("3. Your firewall/router is properly configured")
191
+ return False
192
+
193
+ logger.success(f"✅ Port verification successful - {len(port_manager.verified_ports)} ports available")
194
+ return True
195
+
196
+ def start():
197
+ """Start the provider server."""
198
+ import sys
199
+ import asyncio
200
+ from pathlib import Path
201
+ from dotenv import load_dotenv
202
+ import uvicorn
203
+ from .utils.logging import setup_logger
204
+ from .config import settings
205
+
206
+ # Configure logging with debug mode
207
+ logger = setup_logger(__name__, debug=True)
208
+
209
+ try:
210
+ # Load environment variables from .env file
211
+ env_path = Path(__file__).parent.parent / '.env'
212
+ load_dotenv(dotenv_path=env_path)
213
+
214
+ # Log environment variables
215
+ logger.info("Environment variables:")
216
+ for key, value in os.environ.items():
217
+ if key.startswith('GOLEM_PROVIDER_'):
218
+ logger.info(f"{key}={value}")
219
+
220
+ # Check requirements
221
+ if not check_requirements():
222
+ logger.error("Requirements check failed")
223
+ sys.exit(1)
224
+
225
+ # Verify ports before starting server
226
+ if not asyncio.run(verify_ports()):
227
+ logger.error("Port verification failed")
228
+ sys.exit(1)
229
+
230
+ # Configure uvicorn logging
231
+ log_config = uvicorn.config.LOGGING_CONFIG
232
+ log_config["formatters"]["access"]["fmt"] = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
233
+
234
+ # Run server
235
+ logger.process(f"🚀 Starting provider server on {settings.HOST}:{settings.PORT}")
236
+ uvicorn.run(
237
+ "provider:app",
238
+ host=settings.HOST,
239
+ port=settings.PORT,
240
+ reload=settings.DEBUG,
241
+ log_level="info" if not settings.DEBUG else "debug",
242
+ log_config=log_config,
243
+ timeout_keep_alive=60, # Increase keep-alive timeout
244
+ limit_concurrency=100, # Limit concurrent connections
245
+ )
246
+ except Exception as e:
247
+ logger.error(f"Failed to start provider server: {e}")
248
+ sys.exit(1)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "golem-vm-provider"
3
- version = "0.1.0"
3
+ version = "0.1.1"
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"