diff --git a/changelog/36138.fixed b/changelog/36138.fixed new file mode 100644 index 00000000000..78b2e97cc44 --- /dev/null +++ b/changelog/36138.fixed @@ -0,0 +1 @@ +Add kwargs to handle extra parameters for http.query diff --git a/salt/pillar/http_json.py b/salt/pillar/http_json.py index 98c8a853232..a302d13f0a3 100644 --- a/salt/pillar/http_json.py +++ b/salt/pillar/http_json.py @@ -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 `: + +.. 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"] diff --git a/salt/pillar/http_yaml.py b/salt/pillar/http_yaml.py index 72a7910382c..e9dd518cbb9 100644 --- a/salt/pillar/http_yaml.py +++ b/salt/pillar/http_yaml.py @@ -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 `: + +.. 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"]