import sys import json import urllib.request def get_status(ip, script_id): url = f"http://{ip}/rpc" payload = { "id": 1, "method": "Script.GetStatus", "params": {"id": int(script_id)} } req = urllib.request.Request( url, data=json.dumps(payload).encode('utf-8'), headers={'Content-Type': 'application/json'} ) try: with urllib.request.urlopen(req) as resp: res = json.loads(resp.read().decode('utf-8')) if "result" in res: status = res["result"] # Convert all values to strings as HashiCorp External Provider only accepts string properties return {k: str(v) for k, v in status.items() if v is not None} elif "error" in res: return {"error": str(res["error"])} except Exception as e: return {"error": str(e)} return {"error": "unknown"} if __name__ == "__main__": if len(sys.argv) < 3: # Check stdin if arguments are missing (sometimes Terraform passes parameters to stdin) try: input_data = json.loads(sys.stdin.read()) ip = input_data.get("ip") script_id = input_data.get("script_id") except: ip, script_id = None, None if not ip or not script_id: print(json.dumps({"error": "Usage: get_status.py or pass JSON via stdin"})) sys.exit(1) else: ip = sys.argv[1] script_id = sys.argv[2] status = get_status(ip, script_id) print(json.dumps(status))