|
7 | 7 | import requests |
8 | 8 | from kubernetes.dynamic import DynamicClient |
9 | 9 | from ocp_resources.route import Route |
10 | | -from ocp_resources.secret import Secret |
11 | | -from ocp_resources.service_account import ServiceAccount |
12 | 10 | from timeout_sampler import TimeoutExpiredError, TimeoutSampler |
13 | 11 | from simple_logger.logger import get_logger |
14 | 12 |
|
@@ -36,61 +34,40 @@ class Prometheus(object): |
36 | 34 |
|
37 | 35 | def __init__( |
38 | 36 | self, |
| 37 | + bearer_token: str, |
39 | 38 | namespace: str = "openshift-monitoring", |
40 | 39 | resource_name: str = "prometheus-k8s", |
41 | 40 | client: DynamicClient = None, |
42 | 41 | verify_ssl: bool = True, |
43 | | - bearer_token: str = "", |
44 | 42 | ) -> None: |
45 | 43 | """ |
46 | 44 | Args: |
| 45 | + bearer_token (str, Required): Used for query OAuth with API endpoint, this needs to be created via oc |
| 46 | + create token command |
| 47 | + Example to create prometheus token: oc create token prometheus-k8s -n openshift-monitoring --duration=600s |
| 48 | + This would create a token for prometheus calls, that would expire in 600 seconds |
47 | 49 | namespace (str): Prometheus API resource namespace |
48 | 50 | resource_name (str): Prometheus API resource name |
49 | 51 | client (DynamicClient): Admin client resource |
50 | 52 | verify_ssl (bool): Perform SSL verification on query |
51 | | - bearer_token (str): Used for query OAuth with API endpoint |
52 | 53 | """ |
53 | 54 | self.namespace = namespace |
54 | 55 | self.resource_name = resource_name |
55 | 56 | self.client = client or get_client() |
56 | 57 | self.api_v1 = "/api/v1" |
57 | 58 | self.verify_ssl = verify_ssl |
58 | 59 | self.bearer_token = bearer_token |
| 60 | + |
59 | 61 | self.api_url = self._get_route() |
60 | | - self.headers = self._get_headers() |
| 62 | + self.headers = {"Authorization": f"Bearer {self.bearer_token}"} |
61 | 63 | self.scrape_interval = self.get_scrape_interval() |
62 | 64 |
|
63 | 65 | def _get_route(self) -> str: |
64 | 66 | # get route to prometheus HTTP api |
65 | 67 | LOGGER.info("Prometheus: Obtaining route") |
66 | 68 | route = Route(namespace=self.namespace, name=self.resource_name, client=self.client).instance.spec.host |
67 | | - |
68 | 69 | return f"https://{route}" |
69 | 70 |
|
70 | | - def _get_headers(self) -> Dict[str, str]: |
71 | | - """Uses the Prometheus serviceaccount to get an access token for OAuth if not given""" |
72 | | - LOGGER.info("Setting Prometheus headers and Obtaining OAuth token") |
73 | | - |
74 | | - if not self.bearer_token: |
75 | | - secret = self._get_resource_secret() |
76 | | - self.bearer_token = secret.instance.metadata.annotations["openshift.io/token-secret.value"] |
77 | | - |
78 | | - return {"Authorization": f"Bearer {self.bearer_token}"} |
79 | | - |
80 | | - def _get_service_account(self) -> ServiceAccount: |
81 | | - """get service account for the given namespace and resource""" |
82 | | - |
83 | | - return ServiceAccount(namespace=self.namespace, name=self.resource_name, client=self.client) |
84 | | - |
85 | | - def _get_resource_secret(self) -> Secret: |
86 | | - """secret for the service account extracted""" |
87 | | - resource_sa = self._get_service_account() |
88 | | - return Secret( |
89 | | - namespace=self.namespace, |
90 | | - name=resource_sa.instance.imagePullSecrets[0].name, |
91 | | - client=self.client, |
92 | | - ) |
93 | | - |
94 | 71 | def _get_response(self, query: str) -> Dict[str, Any]: |
95 | 72 | response = requests.get(f"{self.api_url}{query}", headers=self.headers, verify=self.verify_ssl) |
96 | 73 |
|
|
0 commit comments