oc-cdtapi 3.30.3__py3-none-any.whl → 3.30.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- oc_cdtapi/VaultAPI.py +29 -39
- {oc_cdtapi-3.30.3.dist-info → oc_cdtapi-3.30.4.dist-info}/METADATA +1 -1
- {oc_cdtapi-3.30.3.dist-info → oc_cdtapi-3.30.4.dist-info}/RECORD +7 -7
- {oc_cdtapi-3.30.3.data → oc_cdtapi-3.30.4.data}/scripts/nexus.py +0 -0
- {oc_cdtapi-3.30.3.dist-info → oc_cdtapi-3.30.4.dist-info}/WHEEL +0 -0
- {oc_cdtapi-3.30.3.dist-info → oc_cdtapi-3.30.4.dist-info}/licenses/LICENSE +0 -0
- {oc_cdtapi-3.30.3.dist-info → oc_cdtapi-3.30.4.dist-info}/top_level.txt +0 -0
oc_cdtapi/VaultAPI.py
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
import re
|
|
2
1
|
import logging
|
|
3
2
|
import os
|
|
4
|
-
from typing import Any, List, Optional
|
|
5
3
|
|
|
6
4
|
import hvac
|
|
7
|
-
import requests
|
|
8
5
|
from hvac.exceptions import VaultError
|
|
9
6
|
|
|
10
|
-
SECRET_PATTERN = re.compile(r"^[A-Z][A-Z0-9_]*__[A-Z][A-Z0-9_]*$")
|
|
11
|
-
|
|
12
|
-
|
|
13
7
|
class VaultAPI:
|
|
14
8
|
def __init__(self,
|
|
9
|
+
vault_enable=False,
|
|
15
10
|
vault_url=None,
|
|
16
11
|
vault_token=None,
|
|
17
12
|
vault_mount_point=None,
|
|
18
13
|
verify_ssl=True):
|
|
14
|
+
self.vault_enable = vault_enable or os.getenv("VAULT_ENABLE")
|
|
19
15
|
self.vault_url = vault_url or os.getenv("VAULT_URL")
|
|
20
16
|
self.vault_token = vault_token or os.getenv("VAULT_TOKEN")
|
|
21
17
|
self.mount_point = vault_mount_point or os.getenv("VAULT_MOUNT_POINT")
|
|
18
|
+
self.use_staging_secrets = os.getenv("USE_STAGING_ENVIRONMENT", "false").lower() == "true" #Check whether we have env USE_STAGING_ENVIRONMENT true or not
|
|
22
19
|
self.verify_ssl = verify_ssl
|
|
23
20
|
self._client = None
|
|
24
21
|
|
|
25
22
|
# Create a logger instance for this class
|
|
26
23
|
self.logger = logging.getLogger(__name__)
|
|
27
|
-
|
|
24
|
+
|
|
28
25
|
@property
|
|
29
|
-
def client(self)
|
|
26
|
+
def client(self):
|
|
27
|
+
if not self.vault_enable:
|
|
28
|
+
self.logger.warning("VAULT_ENABLE environment set to false, skip using vault")
|
|
29
|
+
return None
|
|
30
|
+
|
|
30
31
|
if self._client is None:
|
|
31
32
|
if not self.vault_url:
|
|
32
33
|
self.logger.warning("VAULT_URL environment variable or vault_url parameter is missing, skip using vault")
|
|
@@ -40,50 +41,39 @@ class VaultAPI:
|
|
|
40
41
|
token=self.vault_token,
|
|
41
42
|
verify=self.verify_ssl
|
|
42
43
|
)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
except requests.exceptions.ConnectionError as e:
|
|
46
|
-
self.logger.warning(f"Failed to authenticate with Vault - Vault is unreachable: {e}")
|
|
47
|
-
self._client = None
|
|
48
|
-
return None
|
|
49
|
-
if not is_authenticated:
|
|
44
|
+
|
|
45
|
+
if not self._client.is_authenticated():
|
|
50
46
|
self.logger.warning("Failed to authenticate with Vault - check credentials, skip using vault")
|
|
51
47
|
return None
|
|
48
|
+
|
|
52
49
|
return self._client
|
|
53
50
|
|
|
54
|
-
def
|
|
55
|
-
if
|
|
56
|
-
|
|
51
|
+
def parse_secret_name(self, name):
|
|
52
|
+
if 'USER' in name:
|
|
53
|
+
split_name = name.split('_USER')[0]
|
|
54
|
+
return split_name, 'USER'
|
|
57
55
|
|
|
58
|
-
|
|
56
|
+
if 'PASSWORD' in name:
|
|
57
|
+
split_name = name.split('_PASSWORD')[0]
|
|
58
|
+
return split_name, 'PASSWORD'
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
return 'OTHER', name
|
|
61
|
+
|
|
62
|
+
def get_secret_from_path(self, name):
|
|
61
63
|
client = self.client
|
|
62
64
|
if client is None:
|
|
63
65
|
return None
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return None
|
|
66
|
+
|
|
67
|
+
secret_path, credentials = self.parse_secret_name(name)
|
|
68
|
+
if self.use_staging_secrets:
|
|
69
|
+
secret_path = secret_path + "_TEST"
|
|
69
70
|
|
|
70
71
|
try:
|
|
71
72
|
response = client.secrets.kv.read_secret_version(path=secret_path, mount_point=self.mount_point)
|
|
72
|
-
return response[
|
|
73
|
+
return response['data']['data'].get(credentials)
|
|
73
74
|
except VaultError as e:
|
|
74
75
|
self.logger.warning(f"Failed getting data from vault for path {secret_path} and credentials {credentials}: {e}")
|
|
75
76
|
return None
|
|
76
|
-
except requests.exceptions.ConnectionError as e:
|
|
77
|
-
self.logger.warning(f"Failed to retrieve secret from Vault - Vault is unreachable: {e}")
|
|
78
|
-
return None
|
|
79
|
-
|
|
80
|
-
def load_secret(self, name: str, default: Optional[Any] = None) -> Optional[Any]:
|
|
81
|
-
is_test = os.getenv("PYTHON_ENV") == "test"
|
|
82
|
-
if is_test:
|
|
83
|
-
name = f"{name}_TEST"
|
|
84
|
-
|
|
85
|
-
value = self.get_secret_from_path(name=name)
|
|
86
|
-
if value is not None:
|
|
87
|
-
return value
|
|
88
77
|
|
|
89
|
-
|
|
78
|
+
def load_secret(self, name, default=None):
|
|
79
|
+
return self.get_secret_from_path(name) or os.getenv(name, default)
|
|
@@ -10,11 +10,11 @@ oc_cdtapi/PgAPI.py,sha256=URSz7qu-Ir7AOj0jI3ucTXn2PM-nC96nmPZI746OLjA,14356
|
|
|
10
10
|
oc_cdtapi/PgQAPI.py,sha256=MJzzm9XGkrMQ8mjoM4WeS1KYAgLeCL73yga8kB-HoUk,9436
|
|
11
11
|
oc_cdtapi/RundeckAPI.py,sha256=O3LmcFaHSz8UqeUyIHTTEMJncDD191Utd-iZaeJay2s,24243
|
|
12
12
|
oc_cdtapi/TestServer.py,sha256=HV97UWg2IK4gOYAp9yaMdwFUWsw9v66MxyZdI3qQctA,2715
|
|
13
|
-
oc_cdtapi/VaultAPI.py,sha256=
|
|
13
|
+
oc_cdtapi/VaultAPI.py,sha256=P-x_PsWe_S0mGUKTCmR1KhUjdfs7GmyaltjGQcnWj_s,2967
|
|
14
14
|
oc_cdtapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
oc_cdtapi-3.30.
|
|
16
|
-
oc_cdtapi-3.30.
|
|
17
|
-
oc_cdtapi-3.30.
|
|
18
|
-
oc_cdtapi-3.30.
|
|
19
|
-
oc_cdtapi-3.30.
|
|
20
|
-
oc_cdtapi-3.30.
|
|
15
|
+
oc_cdtapi-3.30.4.data/scripts/nexus.py,sha256=4teqZ_KtCSrwHDJVgA7lkreteod4Xt5XJFZNbwb7E6E,6858
|
|
16
|
+
oc_cdtapi-3.30.4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
17
|
+
oc_cdtapi-3.30.4.dist-info/METADATA,sha256=2nBugCQ690LJM8S2SmeowaDaJp8TpjC7rJ-zWtKEDI8,504
|
|
18
|
+
oc_cdtapi-3.30.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
19
|
+
oc_cdtapi-3.30.4.dist-info/top_level.txt,sha256=d4-5-D-0CSeSXYuLCP7-nIFCpjkfmJr-Y_muzds8iVU,10
|
|
20
|
+
oc_cdtapi-3.30.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|