view gcp_batch_netcat.py @ 3:0ea626b10557 draft

planemo upload for repository https://github.com/afgane/gcp_batch_netcat
author enis
date Mon, 21 Jul 2025 15:13:09 +0000
parents 79160beab2a4
children 2ff4a39ea41b
line wrap: on
line source


import json
import subprocess
import argparse
import uuid
import time
import os

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--nfs_address', required=True)
    parser.add_argument('--output', required=True)
    parser.add_argument('--project', required=True)
    parser.add_argument('--region', required=True)
    parser.add_argument('--port', default='2049')
    parser.add_argument('--service_account_key', required=True)
    args = parser.parse_args()

    # Set up authentication using the service account key
    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = args.service_account_key

    # Ensure gcloud uses a writable config directory
    os.environ['CLOUDSDK_CONFIG'] = '/tmp/gcloud-config'

    # Create the temp config directory if it doesn't exist
    os.makedirs('/tmp/gcloud-config', exist_ok=True)

    job_name = f'netcat-job-{uuid.uuid4()}'

    job_spec = {
        "taskGroups": [
            {
                "taskSpec": {
                    "runnables": [
                        {
                            "script": {
                                "text": f"/usr/bin/nc -z -v {args.nfs_address} {args.port}"
                            }
                        }
                    ],
                    "computeResource": {
                        "cpuMilli": 1000,
                        "memoryMib": 1024
                    },
                    "environment": {
                        "imageUri": "afgane/gcp-batch-netcat:0.1.0"
                    }
                },
                "taskCount": 1,
                "parallelism": 1
            }
        ],
        "logsPolicy": {
            "destination": "CLOUD_LOGGING"
        }
    }

    job_spec_file = 'job.json'
    with open(job_spec_file, 'w') as f:
        json.dump(job_spec, f)

    command = [
        'gcloud', 'batch', 'jobs', 'submit', job_name,
        '--location', args.region,
        '--project', args.project,
        '--config', job_spec_file,
        '--format=text',
        '--verbosity=debug'
    ]

    # Wait 4 minutes before submitting the job
    time.sleep(240)

    try:
        result = subprocess.run(command, capture_output=True, text=True, check=True)
        with open(args.output, 'w') as f:
            f.write("Job output:\n")
            f.write(result.stdout)
            f.write(result.stderr)
    except subprocess.CalledProcessError as e:
        with open(args.output, 'w') as f:
            f.write("Error submitting job:\n")
            f.write(e.stderr)

if __name__ == '__main__':
    main()