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')