|
27 | 27 | from kubernetes.stream import stream
|
28 | 28 | from kubetester.crypto import wait_for_certs_to_be_issued
|
29 | 29 | from requests.auth import HTTPBasicAuth, HTTPDigestAuth
|
| 30 | +from tests import test_logger |
30 | 31 |
|
31 | 32 | SSL_CA_CERT = "/var/run/secrets/kubernetes.io/serviceaccount/..data/ca.crt"
|
32 | 33 | EXTERNALLY_MANAGED_TAG = "EXTERNALLY_MANAGED_BY_KUBERNETES"
|
|
46 | 47 | "MongoDBMultiCluster": "mongodbmulticluster",
|
47 | 48 | }
|
48 | 49 |
|
| 50 | +from opentelemetry import trace |
| 51 | + |
| 52 | +TRACER = trace.get_tracer("evergreen-agent") |
| 53 | +logger = test_logger.get_test_logger(__name__) |
| 54 | + |
49 | 55 |
|
50 | 56 | def running_locally():
|
51 | 57 | return os.getenv("POD_NAME", "local") == "local"
|
@@ -946,6 +952,16 @@ def get_automation_config(group_id=None, group_name=None):
|
946 | 952 |
|
947 | 953 | return response.json()
|
948 | 954 |
|
| 955 | + @staticmethod |
| 956 | + def get_automation_status(group_id=None, group_name=None): |
| 957 | + if group_id is None: |
| 958 | + group_id = KubernetesTester.get_om_group_id(group_name=group_name) |
| 959 | + |
| 960 | + url = build_automation_status_endpoint(KubernetesTester.get_om_base_url(), group_id) |
| 961 | + response = KubernetesTester.om_request("get", url) |
| 962 | + |
| 963 | + return response.json() |
| 964 | + |
949 | 965 | @staticmethod
|
950 | 966 | def get_monitoring_config(group_id=None):
|
951 | 967 | if group_id is None:
|
@@ -1544,6 +1560,10 @@ def build_automation_config_endpoint(base_url, group_id):
|
1544 | 1560 | return "{}/api/public/v1.0/groups/{}/automationConfig".format(base_url, group_id)
|
1545 | 1561 |
|
1546 | 1562 |
|
| 1563 | +def build_automation_status_endpoint(base_url, group_id): |
| 1564 | + return "{}/api/public/v1.0/groups/{}/automationStatus".format(base_url, group_id) |
| 1565 | + |
| 1566 | + |
1547 | 1567 | def build_monitoring_config_endpoint(base_url, group_id):
|
1548 | 1568 | return "{}/api/public/v1.0/groups/{}/automationConfig/monitoringAgentConfig".format(base_url, group_id)
|
1549 | 1569 |
|
@@ -1683,3 +1703,35 @@ def ensure_ent_version(mdb_version: str) -> str:
|
1683 | 1703 | if "-ent" not in mdb_version:
|
1684 | 1704 | return mdb_version + "-ent"
|
1685 | 1705 | return mdb_version
|
| 1706 | + |
| 1707 | + |
| 1708 | +@TRACER.start_as_current_span("wait_processes_ready") |
| 1709 | +def wait_processes_ready(): |
| 1710 | + # Get current automation status |
| 1711 | + def processes_are_ready(): |
| 1712 | + auto_status = KubernetesTester.get_automation_status() |
| 1713 | + goal_version = auto_status.get("goalVersion") |
| 1714 | + |
| 1715 | + logger.info(f"Checking if all processes have reached goal version: {goal_version}") |
| 1716 | + processes_not_ready = [] |
| 1717 | + for process in auto_status.get("processes", []): |
| 1718 | + process_name = process.get("name", "unknown") |
| 1719 | + process_version = process.get("lastGoalVersionAchieved") |
| 1720 | + if process_version != goal_version: |
| 1721 | + logger.info(f"Process {process_name} at version {process_version}, expected {goal_version}") |
| 1722 | + processes_not_ready.append(process_name) |
| 1723 | + |
| 1724 | + all_processes_ready = len(processes_not_ready) == 0 |
| 1725 | + if all_processes_ready: |
| 1726 | + logger.info("All processes have reached the goal version") |
| 1727 | + else: |
| 1728 | + logger.info(f"{len(processes_not_ready)} processes have not yet reached the goal version") |
| 1729 | + |
| 1730 | + return all_processes_ready |
| 1731 | + |
| 1732 | + timeout = 600 # 5 minutes timeout |
| 1733 | + KubernetesTester.wait_until( |
| 1734 | + processes_are_ready, |
| 1735 | + timeout=timeout, |
| 1736 | + sleep_time=5, |
| 1737 | + ) |
0 commit comments