ssh working now
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import argparse
|
import argparse
|
||||||
@@ -564,19 +565,15 @@ def create_inventory_file(config, deployment_type):
|
|||||||
def run_ansible_playbook(playbook, inventory, config, debug=False):
|
def run_ansible_playbook(playbook, inventory, config, debug=False):
|
||||||
"""Run an Ansible playbook with the given inventory and config"""
|
"""Run an Ansible playbook with the given inventory and config"""
|
||||||
# Convert config dict to JSON for extra-vars
|
# Convert config dict to JSON for extra-vars
|
||||||
# Filter out None values and complex objects
|
|
||||||
extra_vars = {k: v for k, v in config.items() if v is not None and not isinstance(v, (dict, list, tuple))}
|
extra_vars = {k: v for k, v in config.items() if v is not None and not isinstance(v, (dict, list, tuple))}
|
||||||
|
|
||||||
# Handle the region parameter correctly
|
# Handle the region parameter correctly
|
||||||
if 'region' in extra_vars:
|
if 'region' in extra_vars:
|
||||||
# Set selected_region to match what the playbook expects
|
|
||||||
extra_vars['selected_region'] = extra_vars['region']
|
extra_vars['selected_region'] = extra_vars['region']
|
||||||
elif 'linode_region' in extra_vars:
|
elif 'linode_region' in extra_vars:
|
||||||
# Map linode_region to selected_region for compatibility
|
|
||||||
extra_vars['selected_region'] = extra_vars['linode_region']
|
extra_vars['selected_region'] = extra_vars['linode_region']
|
||||||
|
|
||||||
# CRITICAL FIX: Remove ansible_python_interpreter from extra_vars
|
# Remove ansible_python_interpreter from extra_vars
|
||||||
# This prevents local interpreter path from being used on remote hosts
|
|
||||||
if 'ansible_python_interpreter' in extra_vars:
|
if 'ansible_python_interpreter' in extra_vars:
|
||||||
extra_vars.pop('ansible_python_interpreter')
|
extra_vars.pop('ansible_python_interpreter')
|
||||||
|
|
||||||
@@ -591,19 +588,19 @@ def run_ansible_playbook(playbook, inventory, config, debug=False):
|
|||||||
).strip()
|
).strip()
|
||||||
env["PYTHONPATH"] = python_path
|
env["PYTHONPATH"] = python_path
|
||||||
|
|
||||||
# Build command
|
# Build command with output JSON facts format
|
||||||
cmd = [
|
cmd = [
|
||||||
"ansible-playbook",
|
"ansible-playbook",
|
||||||
"-i", inventory,
|
"-i", inventory,
|
||||||
playbook,
|
playbook,
|
||||||
"-e", extra_vars_json
|
"-e", extra_vars_json,
|
||||||
|
"--extra-vars", "ansible_facts_callback=json" # Get facts in JSON format
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add verbosity if debug mode is enabled
|
# Add verbosity if debug mode is enabled
|
||||||
if debug:
|
if debug:
|
||||||
cmd.append("-vvv")
|
cmd.append("-vvv")
|
||||||
else:
|
else:
|
||||||
# Always add some verbosity for basic output
|
|
||||||
cmd.append("-v")
|
cmd.append("-v")
|
||||||
|
|
||||||
# Log the command
|
# Log the command
|
||||||
@@ -620,8 +617,22 @@ def run_ansible_playbook(playbook, inventory, config, debug=False):
|
|||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
text=True,
|
text=True,
|
||||||
env=env # Use the modified environment
|
env=env
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Extract IP addresses from output
|
||||||
|
if "C2 Server IP:" in result.stdout:
|
||||||
|
ip_match = re.search(r"C2 Server IP: ([0-9.]+)", result.stdout)
|
||||||
|
if ip_match:
|
||||||
|
config['c2_ip'] = ip_match.group(1)
|
||||||
|
logging.info(f"Extracted C2 IP: {config['c2_ip']}")
|
||||||
|
|
||||||
|
if "Redirector IP:" in result.stdout:
|
||||||
|
ip_match = re.search(r"Redirector IP: ([0-9.]+)", result.stdout)
|
||||||
|
if ip_match:
|
||||||
|
config['redirector_ip'] = ip_match.group(1)
|
||||||
|
logging.info(f"Extracted Redirector IP: {config['redirector_ip']}")
|
||||||
|
|
||||||
logging.info(f"Playbook {playbook} executed successfully")
|
logging.info(f"Playbook {playbook} executed successfully")
|
||||||
return True, result.stdout, result.stderr
|
return True, result.stdout, result.stderr
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user