Mercurial > repos > enis > gcp_batch_netcat
annotate gcp_batch_netcat.py @ 4:2ff4a39ea41b draft
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
author | enis |
---|---|
date | Tue, 22 Jul 2025 14:47:47 +0000 |
parents | 0ea626b10557 |
children | b2ce158b4f22 |
rev | line source |
---|---|
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
1 import argparse |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
2 import json |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
3 import logging |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
4 import os |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
5 import sys |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
6 # import time |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
7 import uuid |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
8 from google.cloud import batch_v1 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
9 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
10 # Configure logging to go to stdout instead of stderr to avoid Galaxy marking job as failed |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
11 import sys |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
12 logging.basicConfig( |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
13 level=logging.INFO, |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
14 format='%(asctime)s - %(levelname)s - %(message)s', |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
15 stream=sys.stdout |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
16 ) |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
17 logger = logging.getLogger(__name__) |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
18 |
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
19 def main(): |
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
20 parser = argparse.ArgumentParser() |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
21 parser.add_argument('--nfs_address', required=False, help='NFS server address (if not provided, will be auto-detected from /galaxy/server/database/ mount)') |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
22 parser.add_argument('--output', required=True) |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
23 parser.add_argument('--project', required=False, help='GCP Project ID (if not provided, will be extracted from service account key)') |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
24 parser.add_argument('--region', required=True) |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
25 parser.add_argument('--network', default='default', help='GCP Network name') |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
26 parser.add_argument('--subnet', default='default', help='GCP Subnet name') |
2
79160beab2a4
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
0
diff
changeset
|
27 parser.add_argument('--service_account_key', required=True) |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
28 args = parser.parse_args() |
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
29 |
2
79160beab2a4
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
0
diff
changeset
|
30 # Set up authentication using the service account key |
79160beab2a4
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
0
diff
changeset
|
31 os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = args.service_account_key |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
32 logger.info(f"Authentication configured with service account: {args.service_account_key}") |
2
79160beab2a4
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
0
diff
changeset
|
33 |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
34 # Extract GCP project ID from service account key if not provided |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
35 if args.project: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
36 project_id = args.project |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
37 logger.info(f"Using provided project ID: {project_id}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
38 else: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
39 try: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
40 with open(args.service_account_key, 'r') as f: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
41 service_account_data = json.load(f) |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
42 project_id = service_account_data.get('project_id') |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
43 if not project_id: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
44 raise ValueError("project_id not found in service account key file") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
45 logger.info(f"Extracted project ID from service account key: {project_id}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
46 except Exception as e: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
47 logger.error(f"Failed to extract project ID from service account key: {e}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
48 raise |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
49 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
50 # Extract NFS server address if not provided |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
51 if args.nfs_address: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
52 nfs_address = args.nfs_address |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
53 logger.info(f"Using provided NFS address: {nfs_address}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
54 else: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
55 try: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
56 # Try to detect NFS server from /galaxy/server/database/ mount |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
57 import subprocess |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
58 result = subprocess.run(['mount'], capture_output=True, text=True) |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
59 nfs_address = None |
3
0ea626b10557
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
2
diff
changeset
|
60 |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
61 for line in result.stdout.split('\n'): |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
62 if '/galaxy/server/database' in line and ':' in line: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
63 # Look for NFS mount pattern: server:/path on /galaxy/server/database |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
64 parts = line.split() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
65 for part in parts: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
66 if ':' in part and part.count(':') == 1: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
67 nfs_address = part.split(':')[0] |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
68 break |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
69 if nfs_address: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
70 logger.info(f"Detected NFS address from mount: {nfs_address}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
71 break |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
72 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
73 if not nfs_address: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
74 # Fallback: try to parse /proc/mounts |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
75 try: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
76 with open('/proc/mounts', 'r') as f: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
77 for line in f: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
78 if '/galaxy/server/database' in line and ':' in line: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
79 parts = line.split() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
80 if len(parts) > 0 and ':' in parts[0]: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
81 nfs_address = parts[0].split(':')[0] |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
82 logger.info(f"Detected NFS address from /proc/mounts: {nfs_address}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
83 break |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
84 except: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
85 pass |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
86 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
87 if not nfs_address: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
88 raise ValueError("Could not auto-detect NFS server address from /galaxy/server/database/ mount") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
89 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
90 logger.info(f"Auto-detected NFS address from mount: {nfs_address}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
91 except Exception as e: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
92 logger.error(f"Failed to auto-detect NFS address: {e}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
93 raise |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
94 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
95 # time.sleep(10000) |
3
0ea626b10557
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
2
diff
changeset
|
96 |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
97 job_name = f'netcat-job-{uuid.uuid4()}' |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
98 logger.info(f"Generated job name: {job_name}") |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
99 |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
100 # Create Batch client |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
101 logger.info("Creating Batch client...") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
102 client = batch_v1.BatchServiceClient() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
103 logger.info("Batch client created successfully") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
104 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
105 # Define the job using the Python client library objects |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
106 logger.info("Building job specification...") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
107 runnable = batch_v1.Runnable() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
108 runnable.container = batch_v1.Runnable.Container() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
109 runnable.container.image_uri = "afgane/gcp-batch-netcat:0.2.0" |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
110 runnable.container.entrypoint = "/usr/bin/nc" |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
111 runnable.container.commands = ["-z", "-v", nfs_address, "2049"] |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
112 logger.debug(f"Container config: image={runnable.container.image_uri}, entrypoint={runnable.container.entrypoint}, commands={runnable.container.commands}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
113 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
114 task = batch_v1.TaskSpec() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
115 task.runnables = [runnable] |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
116 task.compute_resource = batch_v1.ComputeResource() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
117 task.compute_resource.cpu_milli = 1000 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
118 task.compute_resource.memory_mib = 1024 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
119 logger.debug(f"Compute resources: CPU={task.compute_resource.cpu_milli}m, Memory={task.compute_resource.memory_mib}MiB") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
120 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
121 task_group = batch_v1.TaskGroup() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
122 task_group.task_count = 1 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
123 task_group.parallelism = 1 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
124 task_group.task_spec = task |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
125 logger.debug(f"Task group: count={task_group.task_count}, parallelism={task_group.parallelism}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
126 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
127 # Network configuration: Batch job should run in the same network as the NFS server |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
128 network_interface = batch_v1.AllocationPolicy.NetworkInterface() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
129 network_interface.network = f"global/networks/{args.network}" |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
130 network_interface.subnetwork = f"regions/{args.region}/subnetworks/{args.subnet}" |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
131 logger.debug(f"Network: {network_interface.network}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
132 logger.debug(f"Subnet: {network_interface.subnetwork}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
133 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
134 network_policy = batch_v1.AllocationPolicy.NetworkPolicy() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
135 network_policy.network_interfaces = [network_interface] |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
136 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
137 allocation_policy = batch_v1.AllocationPolicy() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
138 allocation_policy.network = network_policy |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
139 |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
140 job = batch_v1.Job() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
141 job.task_groups = [task_group] |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
142 job.allocation_policy = allocation_policy |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
143 job.logs_policy = batch_v1.LogsPolicy() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
144 job.logs_policy.destination = batch_v1.LogsPolicy.Destination.CLOUD_LOGGING |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
145 logger.info("Job specification built successfully") |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
146 |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
147 create_request = batch_v1.CreateJobRequest() |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
148 create_request.parent = f"projects/{project_id}/locations/{args.region}" |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
149 create_request.job_id = job_name |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
150 create_request.job = job |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
151 logger.debug(f"Create request parent: {create_request.parent}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
152 logger.debug(f"Create request job_id: {create_request.job_id}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
153 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
154 logger.info(f"Submitting job with name: {job_name}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
155 logger.info(f"Target project: {project_id}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
156 logger.info(f"Target Batch region: {args.region}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
157 logger.info(f"NFS target: {nfs_address}:2049") |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
158 |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
159 # Proceed with job submission |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
160 try: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
161 logger.info("Calling client.create_job()...") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
162 job_response = client.create_job(request=create_request) |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
163 logger.info("Job submitted successfully!") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
164 logger.info(f"Job name: {job_response.name}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
165 logger.info(f"Job UID: {job_response.uid}") |
2
79160beab2a4
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
0
diff
changeset
|
166 |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
167 with open(args.output, 'w') as f: |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
168 f.write("Job submitted successfully using Python client.\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
169 f.write(f"Job name: {job_name}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
170 f.write(f"Job response name: {job_response.name}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
171 f.write(f"Job UID: {job_response.uid}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
172 f.write(f"Project: {project_id}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
173 f.write(f"Region: {args.region}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
174 f.write(f"NFS Address: {nfs_address}:2049\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
175 |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
176 except Exception as e: |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
177 logger.error(f"Error submitting job: {type(e).__name__}: {e}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
178 logger.error(f"Error details: {str(e)}") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
179 import traceback |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
180 logger.error("Traceback:", exc_info=True) |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
181 |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
182 with open(args.output, 'w') as f: |
4
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
183 f.write(f"Error submitting job: {type(e).__name__}: {e}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
184 f.write(f"Error details: {str(e)}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
185 f.write(f"Job name: {job_name}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
186 f.write(f"Project: {project_id}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
187 f.write(f"Region: {args.region}\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
188 f.write(f"Traceback:\n") |
2ff4a39ea41b
planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents:
3
diff
changeset
|
189 f.write(traceback.format_exc()) |
0
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
190 |
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
191 if __name__ == '__main__': |
7852c0efafd7
planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff
changeset
|
192 main() |