Skip to content

Commit

Permalink
Merge pull request #86 from itdependsnetworks/issue-67
Browse files Browse the repository at this point in the history
fixes #67
  • Loading branch information
jvanderaa authored Sep 16, 2021
2 parents c97e0f8 + c0e37fb commit 76ff64e
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 4 deletions.
14 changes: 13 additions & 1 deletion plugins/action/query_graphql.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ def nautobot_action_graphql(args):
if not isinstance(ssl_verify, bool):
raise AnsibleError("validate_certs must be a boolean")

update_hostvars = args.get("update_hostvars", False)
Display().vv("Update hostvars is set to: %s" % update_hostvars) # nosec

# Verify SSL Verify is of boolean
if not isinstance(update_hostvars, bool):
raise AnsibleError("update_hostvars must be a boolean")

nautobot_api = NautobotApiBase(token=token, url=url, ssl_verify=ssl_verify)
query = args.get("query")
Display().v("Query String: %s" % query)
Expand Down Expand Up @@ -90,7 +97,12 @@ def nautobot_action_graphql(args):

# Good result, return it
if isinstance(nautobot_response, pynautobot.core.graphql.GraphQLRecord):
# Assign the data of a good result to the response
# If update_hostvars is set, add to ansible_facts which will set to the root of
# the data structure, e.g. hostvars[inventory_hostname]
if args.get("update_hostvars"):
results["ansible_facts"] = nautobot_response.json.get("data")
# Assign to data regardless a good result to the response to the data key
# e.g. hostvars[inventory_hostname]['data']
results["data"] = nautobot_response.json.get("data")

return results
Expand Down
16 changes: 13 additions & 3 deletions plugins/modules/query_graphql.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@
required: False
default: True
type: bool
update_hostvars:
description:
- Whether or not to populate data in the in the root (e.g. hostvars[inventory_hostname]) or within the
'data' key (e.g. hostvars[inventory_hostname]['data']). Beware, that the root keys provided by the query
will overwrite any root keys already present, leverage the GraphQL alias feature to avoid issues.
required: False
default: False
type: bool
"""

EXAMPLES = """
Expand Down Expand Up @@ -82,22 +90,23 @@
site_name: den
query_string: |
query ($site_name:String!) {
sites (name: $site_name) {
sites (name: $site_name) {
id
name
region {
name
}
}
}
}
# Get Response with variables
# Get Response with variables and set to root keys
- name: Obtain list of devices at site in variables from Nautobot
networktocode.nautobot.query_graphql:
url: http://nautobot.local
token: thisIsMyToken
query: "{{ query_string }}"
variables: "{{ variables }}"
update_hostvars: "yes"
"""

RETURN = """
Expand Down Expand Up @@ -145,6 +154,7 @@ def main():
token=dict(required=False, type="str", no_log=True, default=None),
url=dict(required=False, type="str", default=None),
validate_certs=dict(required=False, type="bool", default=True),
update_hostvars=dict(required=False, type="bool", default=False),
),
# Set to true as this is a read only API, this may need to change or have significant changes when Mutations are
# added to the GraphQL endpoint of Nautobot
Expand Down
8 changes: 8 additions & 0 deletions tests/unit/action/test_graphql_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ def test_setup_api_error_incorrect_validate_certs(nautobot_valid_args):
assert str(exc.value) == "validate_certs must be a boolean"


def test_setup_api_error_incorrect_update_hostvars(nautobot_valid_args):
nautobot_valid_args["update_hostvars"] = "Hi"
with pytest.raises(AnsibleError) as exc:
test_class = nautobot_action_graphql(args=nautobot_valid_args)

assert str(exc.value) == "update_hostvars must be a boolean"


def test_query_api_query_error_none(nautobot_valid_args):
nautobot_valid_args["query"] = None
with pytest.raises(AnsibleError) as exc:
Expand Down
1 change: 1 addition & 0 deletions tests/unit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,5 @@ def nautobot_valid_args(graphql_test_query):
"validate_certs": False,
"query": graphql_test_query,
"graph_variables": {},
"update_hostvars": False,
}

0 comments on commit 76ff64e

Please sign in to comment.