|
3 | 3 | Detects changes to opsManagerMapping in release.json for triggering agent releases.
|
4 | 4 | Relies on git origin/master vs local release.json
|
5 | 5 | """
|
| 6 | +import glob |
6 | 7 | import json
|
7 | 8 | import logging
|
| 9 | +import os |
8 | 10 | import subprocess
|
9 | 11 | import sys
|
10 | 12 | from typing import Dict, List, Optional, Tuple
|
@@ -132,6 +134,71 @@ def get_all_agents_for_rebuild() -> List[Tuple[str, str]]:
|
132 | 134 | return list(set(agents))
|
133 | 135 |
|
134 | 136 |
|
| 137 | +def get_currently_used_agents() -> List[Tuple[str, str]]: |
| 138 | + """Returns list of (agent_version, tools_version) tuples for agents currently used in contexts""" |
| 139 | + logger.info("Getting currently used agents from contexts") |
| 140 | + agents = [] |
| 141 | + |
| 142 | + try: |
| 143 | + release_data = load_current_release_json() |
| 144 | + if not release_data: |
| 145 | + logger.error("Could not load release.json") |
| 146 | + return [] |
| 147 | + |
| 148 | + ops_manager_mapping = extract_ops_manager_mapping(release_data) |
| 149 | + ops_manager_versions = ops_manager_mapping.get("ops_manager", {}) |
| 150 | + |
| 151 | + # Search all context files |
| 152 | + context_pattern = "scripts/dev/contexts/**/*" |
| 153 | + context_files = glob.glob(context_pattern, recursive=True) |
| 154 | + |
| 155 | + for context_file in context_files: |
| 156 | + if os.path.isfile(context_file): |
| 157 | + try: |
| 158 | + with open(context_file, "r") as f: |
| 159 | + content = f.read() |
| 160 | + |
| 161 | + # Extract AGENT_VERSION from the context file |
| 162 | + for line in content.split('\n'): |
| 163 | + if line.startswith('export AGENT_VERSION='): |
| 164 | + agent_version = line.split('=')[1].strip() |
| 165 | + tools_version = get_tools_version_for_agent(agent_version) |
| 166 | + agents.append((agent_version, tools_version)) |
| 167 | + logger.info(f"Found agent {agent_version} in {context_file}") |
| 168 | + break |
| 169 | + |
| 170 | + # Extract CUSTOM_OM_VERSION and map to agent version |
| 171 | + for line in content.split('\n'): |
| 172 | + if line.startswith('export CUSTOM_OM_VERSION='): |
| 173 | + om_version = line.split('=')[1].strip() |
| 174 | + if om_version in ops_manager_versions: |
| 175 | + agent_tools = ops_manager_versions[om_version] |
| 176 | + agent_version = agent_tools.get("agent_version") |
| 177 | + tools_version = agent_tools.get("tools_version") |
| 178 | + if agent_version and tools_version: |
| 179 | + agents.append((agent_version, tools_version)) |
| 180 | + logger.info(f"Found OM version {om_version} -> agent {agent_version} in {context_file}") |
| 181 | + break |
| 182 | + |
| 183 | + except Exception as e: |
| 184 | + logger.debug(f"Error reading context file {context_file}: {e}") |
| 185 | + |
| 186 | + # Also add the main agentVersion from release.json |
| 187 | + main_agent_version = release_data.get("agentVersion") |
| 188 | + if main_agent_version: |
| 189 | + tools_version = get_tools_version_for_agent(main_agent_version) |
| 190 | + agents.append((main_agent_version, tools_version)) |
| 191 | + logger.info(f"Found main agent version from release.json: {main_agent_version}") |
| 192 | + |
| 193 | + unique_agents = list(set(agents)) |
| 194 | + logger.info(f"Found {len(unique_agents)} currently used agents") |
| 195 | + return unique_agents |
| 196 | + |
| 197 | + except Exception as e: |
| 198 | + logger.error(f"Error getting currently used agents: {e}") |
| 199 | + return [] |
| 200 | + |
| 201 | + |
135 | 202 | def detect_ops_manager_changes() -> List[Tuple[str, str]]:
|
136 | 203 | """Returns (has_changes, changed_agents_list)"""
|
137 | 204 | logger.info("=== Detecting OM Mapping Changes (Local vs Base) ===")
|
|
0 commit comments