Files
wif2ansible/wif2ansible/models.py

37 lines
1.2 KiB
Python

from dataclasses import dataclass, field
from typing import List, Dict, Optional, Any
@dataclass
class Server:
reference: str
hostname: str # This might be same as reference
ip_address: Optional[str] = None
platform: str = 'unknown' # e.g. 'Windows', 'Linux'
def get_ansible_vars(self) -> Dict[str, Any]:
"""Returns ansible variables based on platform."""
vars = {}
# Basic mapping - can be expanded
p = self.platform.lower()
if 'win' in p:
vars['ansible_connection'] = 'winrm'
vars['ansible_winrm_transport'] = 'ntlm'
vars['ansible_winrm_port'] = 5985
vars['ansible_winrm_server_cert_validation'] = 'ignore' # Common default, maybe safer to omit
elif 'lin' in p or 'rhel' in p or 'ubuntu' in p:
# Default ssh is usually fine, but being explicit doesn't hurt
pass
return vars
@dataclass
class Flow:
flow_id: str
source_ip: str
destination_ip: str
ports: List[int]
protocol: str = 'tcp'
def __hash__(self):
return hash((self.flow_id, self.source_ip, self.destination_ip, tuple(sorted(self.ports)), self.protocol))