Mercurial > repos > enis > gcp_batch_netcat
comparison gcp_batch_netcat.py @ 7:fcfb703748b1 draft
planemo upload for repository https://github.com/afgane/gcp_batch_netcat commit ece227052d14d755b0d0b07a827152b2e98fb94b-dirty
author | enis |
---|---|
date | Thu, 24 Jul 2025 22:32:12 +0000 |
parents | d25792770df8 |
children | 3fd12035e6c9 |
comparison
equal
deleted
inserted
replaced
6:d25792770df8 | 7:fcfb703748b1 |
---|---|
12 format='%(asctime)s - %(levelname)s - %(message)s', | 12 format='%(asctime)s - %(levelname)s - %(message)s', |
13 stream=sys.stdout | 13 stream=sys.stdout |
14 ) | 14 ) |
15 logger = logging.getLogger(__name__) | 15 logger = logging.getLogger(__name__) |
16 | 16 |
17 def discover_nfs_loadbalancer_ip(): | 17 |
18 """ | |
19 Try to discover NFS LoadBalancer IP via Kubernetes API | |
20 Returns the external IP if found, None otherwise | |
21 """ | |
22 try: | |
23 import subprocess | |
24 logger.info("Attempting to discover NFS LoadBalancer IP via kubectl...") | |
25 result = subprocess.run(['kubectl', 'get', 'svc', '-n', 'nfs-provisioner', '-o', 'json'], capture_output=True, text=True) | |
26 if result.returncode == 0: | |
27 services = json.loads(result.stdout) | |
28 for item in services.get('items', []): | |
29 name = item.get('metadata', {}).get('name', '') | |
30 # Look for NFS-related service names | |
31 if any(keyword in name.lower() for keyword in ['nfs-provisioner-nfs-server-provisioner']): | |
32 spec = item.get('spec', {}) | |
33 if spec.get('type') == 'LoadBalancer': | |
34 ingress = item.get('status', {}).get('loadBalancer', {}).get('ingress', []) | |
35 if ingress: | |
36 ip = ingress[0].get('ip') | |
37 if ip: | |
38 logger.info(f"Found NFS LoadBalancer service '{name}' with external IP: {ip}") | |
39 return ip | |
40 logger.warning("No NFS LoadBalancer services found via kubectl") | |
41 else: | |
42 logger.warning(f"kubectl command failed: {result.stderr}") | |
43 except Exception as e: | |
44 logger.warning(f"Could not discover NFS LoadBalancer IP via kubectl: {e}") | |
45 return None | |
46 | 18 |
47 def determine_test_target(args): | 19 def determine_test_target(args): |
48 """Determine the target host and port based on test type""" | 20 """Determine the target host and port based on test type""" |
49 | 21 |
50 if args.test_type == 'nfs': | 22 if args.test_type == 'nfs': |
51 # Extract NFS server address if not provided | 23 # NFS server address is required |
52 if args.nfs_address: | 24 if not args.nfs_address: |
53 nfs_address = args.nfs_address | 25 raise ValueError("NFS server address is required. Please provide --nfs_address parameter with the LoadBalancer external IP.") |
54 logger.info(f"Using provided NFS address: {nfs_address}") | 26 |
55 else: | 27 nfs_address = args.nfs_address |
56 # Try to auto-discover NFS LoadBalancer IP via Kubernetes API | 28 logger.info(f"Using provided NFS address: {nfs_address}") |
57 nfs_address = discover_nfs_loadbalancer_ip() | |
58 if not nfs_address: | |
59 raise ValueError("Could not auto-detect NFS LoadBalancer IP. Please provide --nfs_address parameter with the LoadBalancer external IP.") | |
60 return nfs_address, 2049 | 29 return nfs_address, 2049 |
61 | 30 |
62 else: | 31 else: |
63 raise ValueError(f"Unsupported test type: {args.test_type}") | 32 raise ValueError(f"Unsupported test type: {args.test_type}") |
64 | 33 |
65 def main(): | 34 def main(): |
66 parser = argparse.ArgumentParser() | 35 parser = argparse.ArgumentParser() |
67 parser.add_argument('--nfs_address', required=False, help='NFS server LoadBalancer IP address (if not provided, will be auto-detected via Kubernetes API)') | 36 parser.add_argument('--nfs_address', required=True, help='NFS server LoadBalancer external IP address (required)') |
68 parser.add_argument('--output', required=True) | 37 parser.add_argument('--output', required=True) |
69 parser.add_argument('--project', required=False, help='GCP Project ID (if not provided, will be extracted from service account key)') | 38 parser.add_argument('--project', required=False, help='GCP Project ID (if not provided, will be extracted from service account key)') |
70 parser.add_argument('--region', required=True) | 39 parser.add_argument('--region', required=True) |
71 parser.add_argument('--network', default='default', help='GCP Network name') | 40 parser.add_argument('--network', default='default', help='GCP Network name') |
72 parser.add_argument('--subnet', default='default', help='GCP Subnet name') | 41 parser.add_argument('--subnet', default='default', help='GCP Subnet name') |