annotate gcp_batch_netcat.py @ 5:b2ce158b4f22 draft

planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
author enis
date Thu, 24 Jul 2025 21:41:18 +0000
parents 2ff4a39ea41b
children d25792770df8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
6 import uuid
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
7 from google.cloud import batch_v1
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
8
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
9 # 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
10 logging.basicConfig(
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
11 level=logging.INFO,
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
12 format='%(asctime)s - %(levelname)s - %(message)s',
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
13 stream=sys.stdout
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
14 )
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
15 logger = logging.getLogger(__name__)
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
16
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
17 def determine_test_target(args):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
18 """Determine the target host and port based on test type"""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
19
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
20 if args.test_type == 'custom':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
21 if not args.custom_host:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
22 raise ValueError("custom_host is required when test_type is 'custom'")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
23 return args.custom_host, args.custom_port
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
24
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
25 elif args.test_type == 'nfs':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
26 # Extract NFS server address if not provided
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
27 if args.nfs_address:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
28 nfs_address = args.nfs_address
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
29 logger.info(f"Using provided NFS address: {nfs_address}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
30 else:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
31 try:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
32 # Try to detect NFS server from /galaxy/server/database/ mount
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
33 import subprocess
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
34 result = subprocess.run(['mount'], capture_output=True, text=True)
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
35 nfs_address = None
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
36
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
37 for line in result.stdout.split('\n'):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
38 if '/galaxy/server/database' in line and ':' in line:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
39 # Look for NFS mount pattern: server:/path on /galaxy/server/database
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
40 parts = line.split()
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
41 for part in parts:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
42 if ':' in part and part.count(':') == 1:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
43 nfs_address = part.split(':')[0]
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
44 break
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
45 if nfs_address:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
46 logger.info(f"Detected NFS address from mount: {nfs_address}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
47 break
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
48
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
49 if not nfs_address:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
50 # Fallback: try to parse /proc/mounts
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
51 try:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
52 with open('/proc/mounts', 'r') as f:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
53 for line in f:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
54 if '/galaxy/server/database' in line and ':' in line:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
55 parts = line.split()
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
56 if len(parts) > 0 and ':' in parts[0]:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
57 nfs_address = parts[0].split(':')[0]
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
58 logger.info(f"Detected NFS address from /proc/mounts: {nfs_address}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
59 break
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
60 except:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
61 pass
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
62
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
63 if not nfs_address:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
64 raise ValueError("Could not auto-detect NFS server address from /galaxy/server/database/ mount")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
65
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
66 logger.info(f"Auto-detected NFS address from mount: {nfs_address}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
67 except Exception as e:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
68 logger.error(f"Failed to auto-detect NFS address: {e}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
69 raise
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
70 return nfs_address, 2049
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
71
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
72 elif args.test_type == 'galaxy_web':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
73 # Try to detect Galaxy web service
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
74 try:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
75 import subprocess
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
76 result = subprocess.run(['kubectl', 'get', 'svc', '-o', 'json'], capture_output=True, text=True)
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
77 if result.returncode == 0:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
78 services = json.loads(result.stdout)
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
79 for item in services.get('items', []):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
80 name = item.get('metadata', {}).get('name', '')
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
81 if 'galaxy' in name.lower() and ('web' in name.lower() or 'nginx' in name.lower()):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
82 # Found a Galaxy web service
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
83 spec = item.get('spec', {})
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
84 if spec.get('type') == 'LoadBalancer':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
85 ingress = item.get('status', {}).get('loadBalancer', {}).get('ingress', [])
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
86 if ingress:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
87 ip = ingress[0].get('ip')
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
88 if ip:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
89 port = 80
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
90 for port_spec in spec.get('ports', []):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
91 if port_spec.get('port'):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
92 port = port_spec['port']
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
93 break
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
94 logger.info(f"Found Galaxy web service LoadBalancer: {ip}:{port}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
95 return ip, port
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
96 # Fallback to ClusterIP
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
97 cluster_ip = spec.get('clusterIP')
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
98 if cluster_ip and cluster_ip != 'None':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
99 port = 80
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
100 for port_spec in spec.get('ports', []):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
101 if port_spec.get('port'):
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
102 port = port_spec['port']
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
103 break
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
104 logger.info(f"Found Galaxy web service ClusterIP: {cluster_ip}:{port}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
105 return cluster_ip, port
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
106 except Exception as e:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
107 logger.warning(f"Could not auto-detect Galaxy web service: {e}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
108
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
109 # Fallback: try common Galaxy service names
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
110 common_hosts = ['galaxy-web', 'galaxy-nginx', 'galaxy']
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
111 logger.info(f"Trying common Galaxy service name: {common_hosts[0]}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
112 return common_hosts[0], 80
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
113
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
114 elif args.test_type == 'k8s_dns':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
115 # Test Kubernetes DNS resolution
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
116 return 'kubernetes.default.svc.cluster.local', 443
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
117
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
118 elif args.test_type == 'google_dns':
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
119 # Test external connectivity
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
120 return '8.8.8.8', 53
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
121
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
122 else:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
123 raise ValueError(f"Unsupported test type: {args.test_type}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
124
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
125 def main():
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
126 parser = argparse.ArgumentParser()
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
127 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
128 parser.add_argument('--output', required=True)
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
129 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
130 parser.add_argument('--region', required=True)
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
131 parser.add_argument('--network', default='default', help='GCP Network name')
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
132 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
133 parser.add_argument('--service_account_key', required=True)
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
134 parser.add_argument('--test_type', default='nfs', choices=['nfs', 'galaxy_web', 'k8s_dns', 'google_dns', 'custom'],
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
135 help='Type of connectivity test to perform')
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
136 parser.add_argument('--custom_host', required=False, help='Custom host to test (required if test_type is custom)')
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
137 parser.add_argument('--custom_port', type=int, default=80, help='Custom port to test (default: 80)')
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
138 args = parser.parse_args()
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
139
2
79160beab2a4 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents: 0
diff changeset
140 # 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
141 os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = args.service_account_key
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
142 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
143
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
144 # Extract GCP project ID from service account key if not provided
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
145 if args.project:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
146 project_id = args.project
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
147 logger.info(f"Using provided project ID: {project_id}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
148 else:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
149 try:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
150 with open(args.service_account_key, 'r') as f:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
151 service_account_data = json.load(f)
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
152 project_id = service_account_data.get('project_id')
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
153 if not project_id:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
154 raise ValueError("project_id not found in service account key file")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
155 logger.info(f"Extracted project ID from service account key: {project_id}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
156 except Exception as e:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
157 logger.error(f"Failed to extract project ID from service account key: {e}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
158 raise
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
159
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
160 # Determine target host and port based on test type
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
161 try:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
162 target_host, target_port = determine_test_target(args)
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
163 logger.info(f"Target determined: {target_host}:{target_port}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
164 except Exception as e:
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
165 logger.error(f"Failed to determine target: {e}")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
166 raise
3
0ea626b10557 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents: 2
diff changeset
167
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
168 job_name = f'netcat-job-{uuid.uuid4()}'
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
169 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
170
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
171 # Create Batch client
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
172 logger.info("Creating Batch client...")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
173 client = batch_v1.BatchServiceClient()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
174 logger.info("Batch client created successfully")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
175
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
176 # Define the job using the Python client library objects
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
177 logger.info("Building job specification...")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
178 runnable = batch_v1.Runnable()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
179 runnable.container = batch_v1.Runnable.Container()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
180 runnable.container.image_uri = "afgane/gcp-batch-netcat:0.2.0"
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
181
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
182 # Create a comprehensive test script
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
183 test_script = f'''#!/bin/bash
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
184 set -e
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
185 echo "=== GCP Batch Connectivity Test ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
186 echo "Test Type: {args.test_type}"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
187 echo "Target: {target_host}:{target_port}"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
188 echo "Timestamp: $(date)"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
189 echo "Container hostname: $(hostname)"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
190 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
191
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
192 # Basic network info
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
193 echo "=== Network Information ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
194 echo "Container IP addresses:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
195 hostname -I
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
196 echo "Default route:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
197 ip route | grep default || echo "No default route found"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
198 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
199
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
200 # DNS configuration
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
201 echo "=== DNS Configuration ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
202 echo "DNS servers:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
203 cat /etc/resolv.conf | grep nameserver || echo "No nameservers found"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
204 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
205
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
206 # Test DNS resolution of target
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
207 echo "=== DNS Resolution Test ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
208 echo "Resolving {target_host}:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
209 nslookup {target_host} || {{
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
210 echo "DNS resolution failed for {target_host}"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
211 echo "Trying with Google DNS (8.8.8.8):"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
212 nslookup {target_host} 8.8.8.8 || echo "DNS resolution failed even with Google DNS"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
213 }}
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
214 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
215
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
216 # Basic connectivity test
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
217 echo "=== Primary Connectivity Test ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
218 echo "Testing connection to {target_host}:{target_port}..."
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
219 timeout 30 nc -z -v -w 10 {target_host} {target_port}
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
220 nc_result=$?
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
221 echo "Netcat result: $nc_result"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
222 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
223
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
224 # Additional connectivity tests
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
225 echo "=== Additional Connectivity Tests ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
226 echo "Testing Google DNS (8.8.8.8:53):"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
227 timeout 10 nc -z -v -w 5 8.8.8.8 53 && echo "✓ External DNS reachable" || echo "✗ External DNS unreachable"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
228
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
229 echo "Testing Kubernetes API (if accessible):"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
230 timeout 10 nc -z -v -w 5 kubernetes.default.svc.cluster.local 443 2>/dev/null && echo "✓ Kubernetes API reachable" || echo "✗ Kubernetes API unreachable"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
231
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
232 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
233 echo "=== Network Troubleshooting ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
234 echo "Route table:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
235 ip route
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
236 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
237 echo "ARP table:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
238 arp -a 2>/dev/null || echo "ARP command not available"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
239 echo ""
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
240
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
241 echo "=== Final Result ==="
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
242 if [ $nc_result -eq 0 ]; then
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
243 echo "✓ SUCCESS: Connection to {target_host}:{target_port} successful"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
244 exit 0
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
245 else
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
246 echo "✗ FAILED: Connection to {target_host}:{target_port} failed"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
247 echo "This suggests a network connectivity issue between GCP Batch and the target service."
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
248 echo "Common causes:"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
249 echo "- Firewall rules blocking traffic"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
250 echo "- Service not accessible from external networks"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
251 echo "- Target service only accepting internal cluster traffic"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
252 exit 1
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
253 fi
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
254 '''
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
255
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
256 runnable.container.entrypoint = "/bin/bash"
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
257 runnable.container.commands = ["-c", test_script]
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
258 logger.debug(f"Container config: image={runnable.container.image_uri}, entrypoint={runnable.container.entrypoint}")
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
259
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
260 task = batch_v1.TaskSpec()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
261 task.runnables = [runnable]
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
262 task.compute_resource = batch_v1.ComputeResource()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
263 task.compute_resource.cpu_milli = 1000
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
264 task.compute_resource.memory_mib = 1024
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
265 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
266
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
267 task_group = batch_v1.TaskGroup()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
268 task_group.task_count = 1
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
269 task_group.parallelism = 1
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
270 task_group.task_spec = task
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
271 logger.debug(f"Task group: count={task_group.task_count}, parallelism={task_group.parallelism}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
272
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
273 # Network configuration: Batch job should run in the same network as the NFS server
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
274 network_interface = batch_v1.AllocationPolicy.NetworkInterface()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
275 network_interface.network = f"global/networks/{args.network}"
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
276 network_interface.subnetwork = f"regions/{args.region}/subnetworks/{args.subnet}"
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
277 logger.debug(f"Network: {network_interface.network}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
278 logger.debug(f"Subnet: {network_interface.subnetwork}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
279
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
280 network_policy = batch_v1.AllocationPolicy.NetworkPolicy()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
281 network_policy.network_interfaces = [network_interface]
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
282
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
283 allocation_policy = batch_v1.AllocationPolicy()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
284 allocation_policy.network = network_policy
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
285
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
286 job = batch_v1.Job()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
287 job.task_groups = [task_group]
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
288 job.allocation_policy = allocation_policy
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
289 job.logs_policy = batch_v1.LogsPolicy()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
290 job.logs_policy.destination = batch_v1.LogsPolicy.Destination.CLOUD_LOGGING
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
291 logger.info("Job specification built successfully")
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
292
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
293 create_request = batch_v1.CreateJobRequest()
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
294 create_request.parent = f"projects/{project_id}/locations/{args.region}"
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
295 create_request.job_id = job_name
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
296 create_request.job = job
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
297 logger.debug(f"Create request parent: {create_request.parent}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
298 logger.debug(f"Create request job_id: {create_request.job_id}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
299
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
300 logger.info(f"Submitting job with name: {job_name}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
301 logger.info(f"Target project: {project_id}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
302 logger.info(f"Target Batch region: {args.region}")
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
303 logger.info(f"Test target: {target_host}:{target_port}")
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
304
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
305 # Proceed with job submission
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
306 try:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
307 logger.info("Calling client.create_job()...")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
308 job_response = client.create_job(request=create_request)
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
309 logger.info("Job submitted successfully!")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
310 logger.info(f"Job name: {job_response.name}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
311 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
312
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
313 with open(args.output, 'w') as f:
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
314 f.write("Job submitted successfully using Python client.\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
315 f.write(f"Job name: {job_name}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
316 f.write(f"Job response name: {job_response.name}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
317 f.write(f"Job UID: {job_response.uid}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
318 f.write(f"Project: {project_id}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
319 f.write(f"Region: {args.region}\n")
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
320 f.write(f"Test Type: {args.test_type}\n")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
321 f.write(f"Target: {target_host}:{target_port}\n")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
322 f.write(f"\nTo view job logs, run:\n")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
323 f.write(f"gcloud logging read 'resource.type=gce_instance AND resource.labels.instance_id={job_name}' --project={project_id}\n")
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
324
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
325 except Exception as e:
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
326 logger.error(f"Error submitting job: {type(e).__name__}: {e}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
327 logger.error(f"Error details: {str(e)}")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
328 import traceback
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
329 logger.error("Traceback:", exc_info=True)
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
330
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
331 with open(args.output, 'w') as f:
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
332 f.write(f"Error submitting job: {type(e).__name__}: {e}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
333 f.write(f"Error details: {str(e)}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
334 f.write(f"Job name: {job_name}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
335 f.write(f"Project: {project_id}\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
336 f.write(f"Region: {args.region}\n")
5
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
337 f.write(f"Test Type: {args.test_type}\n")
b2ce158b4f22 planemo upload commit ece227052d14d755b0d0b07a827152b2e98fb94b
enis
parents: 4
diff changeset
338 f.write(f"Target: {target_host}:{target_port}\n")
4
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
339 f.write(f"Traceback:\n")
2ff4a39ea41b planemo upload commit 1bf6938d35be8e67e317f504f43f281ce7dc06e6
enis
parents: 3
diff changeset
340 f.write(traceback.format_exc())
0
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
341
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
342 if __name__ == '__main__':
7852c0efafd7 planemo upload for repository https://github.com/afgane/gcp_batch_netcat
enis
parents:
diff changeset
343 main()