feat(http_pillar): added kwargs to handle extra option for http.query

This commit is contained in:
Anthony Martinet 2021-11-10 11:07:46 +01:00 committed by Gareth J. Greenaway
parent 8006ca52bb
commit 07b3c033a9
3 changed files with 39 additions and 6 deletions

1
changelog/36138.fixed Normal file
View file

@ -0,0 +1 @@
Add kwargs to handle extra parameters for http.query

View file

@ -12,9 +12,15 @@ Set the following Salt config to setup http json result as external pillar sourc
ext_pillar:
- http_json:
url: http://example.com/api/minion_id
::TODO::
username: username
password: password
header_dict: None
auth: None
You can pass additional parameters, they will be added to the http.query call
:py:func:`utils.http.query function <salt.utils.http.query>`:
.. autofunction:: salt.utils.http.query
If the with_grains parameter is set, grain keys wrapped in can be provided (wrapped
in <> brackets) in the url in order to populate pillar data based on the grain value.
@ -52,16 +58,26 @@ def __virtual__():
return True
def ext_pillar(minion_id, pillar, url, with_grains=False): # pylint: disable=W0613
def ext_pillar(
minion_id, pillar, url, with_grains=False, **kwargs
): # pylint: disable=W0613
"""
Read pillar data from HTTP response.
:param str url: Url to request.
:param bool with_grains: Whether to substitute strings in the url with their grain values.
:param dict header_dict: Extra headers to send
:param str username: username for auth
:param str pasword: password for auth
:param auth: special auth if needed
:return: A dictionary of the pillar data to add.
:rtype: dict
"""
# As we are dealing with kwargs, clean args that are hardcoded in this function
for arg in ["url", "decode", "decode_type"]:
if arg in kwargs:
del kwargs[arg]
url = url.replace("%s", urllib.parse.quote(minion_id))
@ -82,7 +98,7 @@ def ext_pillar(minion_id, pillar, url, with_grains=False): # pylint: disable=W0
url = re.sub("<{}>".format(grain_name), grain_value, url)
log.debug("Getting url: %s", url)
data = __salt__["http.query"](url=url, decode=True, decode_type="json")
data = __salt__["http.query"](url=url, decode=True, decode_type="json", **kwargs)
if "dict" in data:
return data["dict"]

View file

@ -12,9 +12,15 @@ Set the following Salt config to setup an http endpoint as the external pillar s
ext_pillar:
- http_yaml:
url: http://example.com/api/minion_id
::TODO::
username: username
password: password
header_dict: None
auth: None
You can pass additional parameters, they will be added to the http.query call
:py:func:`utils.http.query function <salt.utils.http.query>`:
.. autofunction:: salt.utils.http.query
If the with_grains parameter is set, grain keys wrapped in can be provided (wrapped
in <> brackets) in the url in order to populate pillar data based on the grain value.
@ -50,16 +56,26 @@ def __virtual__():
return True
def ext_pillar(minion_id, pillar, url, with_grains=False): # pylint: disable=W0613
def ext_pillar(
minion_id, pillar, url, with_grains=False, **kwargs
): # pylint: disable=W0613
"""
Read pillar data from HTTP response.
:param str url: Url to request.
:param bool with_grains: Whether to substitute strings in the url with their grain values.
:param dict header_dict: Extra headers to send
:param str username: username for auth
:param str pasword: password for auth
:param auth: special auth if needed
:return: A dictionary of the pillar data to add.
:rtype: dict
"""
# As we are dealing with kwargs, clean args that are hardcoded in this function
for arg in ["url", "decode", "decode_type"]:
if arg in kwargs:
del kwargs[arg]
url = url.replace("%s", urllib.parse.quote(minion_id))
@ -80,7 +96,7 @@ def ext_pillar(minion_id, pillar, url, with_grains=False): # pylint: disable=W0
url = re.sub("<{}>".format(grain_name), grain_value, url)
log.debug("Getting url: %s", url)
data = __salt__["http.query"](url=url, decode=True, decode_type="yaml")
data = __salt__["http.query"](url=url, decode=True, decode_type="yaml", **kwargs)
if "dict" in data:
return data["dict"]