Skip to content

Commit

Permalink
feat(http_pillar): added kwargs to handle extra option for http.query
Browse files Browse the repository at this point in the history
  • Loading branch information
martintamare authored and Alkivi committed May 12, 2022
1 parent 38341cb commit 9790e4f
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 6 deletions.
1 change: 1 addition & 0 deletions changelog/36138.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add kwargs to handle extra parameters for http.query
22 changes: 19 additions & 3 deletions salt/pillar/http_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@
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.
Expand Down Expand Up @@ -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))

Expand All @@ -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"]
Expand Down
22 changes: 19 additions & 3 deletions salt/pillar/http_yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@
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.
Expand Down Expand Up @@ -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))

Expand All @@ -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"]
Expand Down

0 comments on commit 9790e4f

Please sign in to comment.