mirror of
https://github.com/ansible/awx.git
synced 2026-05-18 06:47:41 -02:30
Merge pull request #4328 from jakemcdermott/nested-hashi-kv-v2-engine-names
support nested names for hashivault kv v2 secret engine Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
This commit is contained in:
@@ -37,7 +37,7 @@ base_inputs = {
|
|||||||
'id': 'secret_path',
|
'id': 'secret_path',
|
||||||
'label': _('Path to Secret'),
|
'label': _('Path to Secret'),
|
||||||
'type': 'string',
|
'type': 'string',
|
||||||
'help_text': _('The path to the secret e.g., /some-engine/some-secret/'),
|
'help_text': _('The path to the secret stored in the secret backend e.g, /some/secret/')
|
||||||
}],
|
}],
|
||||||
'required': ['url', 'token', 'secret_path'],
|
'required': ['url', 'token', 'secret_path'],
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,12 @@ hashi_kv_inputs['fields'].append({
|
|||||||
'help_text': _('API v1 is for static key/value lookups. API v2 is for versioned key/value lookups.'),
|
'help_text': _('API v1 is for static key/value lookups. API v2 is for versioned key/value lookups.'),
|
||||||
'default': 'v1',
|
'default': 'v1',
|
||||||
})
|
})
|
||||||
hashi_kv_inputs['metadata'].extend([{
|
hashi_kv_inputs['metadata'] = [{
|
||||||
|
'id': 'secret_backend',
|
||||||
|
'label': _('Name of Secret Backend'),
|
||||||
|
'type': 'string',
|
||||||
|
'help_text': _('The name of the kv secret backend (if left empty, the first segment of the secret path will be used).')
|
||||||
|
}] + hashi_kv_inputs['metadata'] + [{
|
||||||
'id': 'secret_key',
|
'id': 'secret_key',
|
||||||
'label': _('Key Name'),
|
'label': _('Key Name'),
|
||||||
'type': 'string',
|
'type': 'string',
|
||||||
@@ -60,7 +65,7 @@ hashi_kv_inputs['metadata'].extend([{
|
|||||||
'label': _('Secret Version (v2 only)'),
|
'label': _('Secret Version (v2 only)'),
|
||||||
'type': 'string',
|
'type': 'string',
|
||||||
'help_text': _('Used to specify a specific secret version (if left empty, the latest version will be used).'),
|
'help_text': _('Used to specify a specific secret version (if left empty, the latest version will be used).'),
|
||||||
}])
|
}]
|
||||||
hashi_kv_inputs['required'].extend(['api_version', 'secret_key'])
|
hashi_kv_inputs['required'].extend(['api_version', 'secret_key'])
|
||||||
|
|
||||||
hashi_ssh_inputs = copy.deepcopy(base_inputs)
|
hashi_ssh_inputs = copy.deepcopy(base_inputs)
|
||||||
@@ -85,8 +90,9 @@ hashi_ssh_inputs['required'].extend(['public_key', 'role'])
|
|||||||
|
|
||||||
def kv_backend(**kwargs):
|
def kv_backend(**kwargs):
|
||||||
token = kwargs['token']
|
token = kwargs['token']
|
||||||
url = urljoin(kwargs['url'], 'v1')
|
url = kwargs['url']
|
||||||
secret_path = kwargs['secret_path']
|
secret_path = kwargs['secret_path']
|
||||||
|
secret_backend = kwargs.get('secret_backend', None)
|
||||||
secret_key = kwargs.get('secret_key', None)
|
secret_key = kwargs.get('secret_key', None)
|
||||||
cacert = kwargs.get('cacert', None)
|
cacert = kwargs.get('cacert', None)
|
||||||
api_version = kwargs['api_version']
|
api_version = kwargs['api_version']
|
||||||
@@ -101,23 +107,29 @@ def kv_backend(**kwargs):
|
|||||||
if api_version == 'v2':
|
if api_version == 'v2':
|
||||||
if kwargs.get('secret_version'):
|
if kwargs.get('secret_version'):
|
||||||
request_kwargs['params'] = {'version': kwargs['secret_version']}
|
request_kwargs['params'] = {'version': kwargs['secret_version']}
|
||||||
try:
|
if secret_backend:
|
||||||
mount_point, *path = pathlib.Path(secret_path.lstrip(os.sep)).parts
|
path_segments = [secret_backend, 'data', secret_path]
|
||||||
'/'.join(path)
|
else:
|
||||||
except Exception:
|
try:
|
||||||
mount_point, path = secret_path, []
|
mount_point, *path = pathlib.Path(secret_path.lstrip(os.sep)).parts
|
||||||
# https://www.vaultproject.io/api/secret/kv/kv-v2.html#read-secret-version
|
'/'.join(path)
|
||||||
request_url = '/'.join([url, mount_point, 'data'] + path).rstrip('/')
|
except Exception:
|
||||||
response = sess.get(request_url, **request_kwargs)
|
mount_point, path = secret_path, []
|
||||||
|
# https://www.vaultproject.io/api/secret/kv/kv-v2.html#read-secret-version
|
||||||
response.raise_for_status()
|
path_segments = [mount_point, 'data'] + path
|
||||||
json = response.json()['data']
|
|
||||||
else:
|
else:
|
||||||
request_url = '/'.join([url, secret_path]).rstrip('/')
|
if secret_backend:
|
||||||
response = sess.get(request_url, **request_kwargs)
|
path_segments = [secret_backend, secret_path]
|
||||||
|
else:
|
||||||
|
path_segments = [secret_path]
|
||||||
|
|
||||||
response.raise_for_status()
|
request_url = urljoin(url, '/'.join(['v1'] + path_segments)).rstrip('/')
|
||||||
json = response.json()
|
response = sess.get(request_url, **request_kwargs)
|
||||||
|
response.raise_for_status()
|
||||||
|
|
||||||
|
json = response.json()
|
||||||
|
if api_version == 'v2':
|
||||||
|
json = json['data']
|
||||||
|
|
||||||
if secret_key:
|
if secret_key:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user