111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
#!/usr/bin/python
|
|
# Copyright: Ansible Project
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
__metaclass__ = type
|
|
|
|
|
|
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|
'status': ['preview'],
|
|
'supported_by': 'network'}
|
|
|
|
|
|
DOCUMENTATION = """
|
|
---
|
|
module: restconf_get
|
|
version_added: "2.8"
|
|
author: "Ganesh Nalawade (@ganeshrn)"
|
|
short_description: Fetch configuration/state data from RESTCONF enabled devices.
|
|
description:
|
|
- RESTCONF is a standard mechanisms to allow web applications to access the
|
|
configuration data and state data developed and standardized by
|
|
the IETF. It is documented in RFC 8040.
|
|
- This module allows the user to fetch configuration and state data from RESTCONF
|
|
enabled devices.
|
|
options:
|
|
path:
|
|
description:
|
|
- URI being used to execute API calls.
|
|
required: true
|
|
content:
|
|
description:
|
|
- The C(content) is a query parameter that controls how descendant nodes of the
|
|
requested data nodes in C(path) will be processed in the reply. If value is
|
|
I(config) return only configuration descendant data nodes of value in C(path).
|
|
If value is I(nonconfig) return only non-configuration descendant data nodes
|
|
of value in C(path). If value is I(all) return all descendant data nodes of
|
|
value in C(path)
|
|
required: false
|
|
choices: ['config', 'nonconfig', 'all']
|
|
output:
|
|
description:
|
|
- The output of response received.
|
|
required: false
|
|
default: json
|
|
choices: ['json', 'xml']
|
|
"""
|
|
|
|
EXAMPLES = """
|
|
- name: get l3vpn services
|
|
restconf_get:
|
|
path: /config/ietf-l3vpn-svc:l3vpn-svc/vpn-services
|
|
"""
|
|
|
|
RETURN = """
|
|
response:
|
|
description: A dictionary representing a JSON-formatted response
|
|
returned: when the device response is valid JSON
|
|
type: dict
|
|
sample: |
|
|
{
|
|
"vpn-services": {
|
|
"vpn-service": [
|
|
{
|
|
"customer-name": "red",
|
|
"vpn-id": "blue_vpn1",
|
|
"vpn-service-topology": "ietf-l3vpn-svc:any-to-any"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
"""
|
|
|
|
from ansible.module_utils._text import to_text
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
from ansible.module_utils.connection import ConnectionError
|
|
from ansible.module_utils.network.restconf import restconf
|
|
|
|
|
|
def main():
|
|
"""entry point for module execution
|
|
"""
|
|
argument_spec = dict(
|
|
path=dict(required=True),
|
|
content=dict(choices=['config', 'nonconfig', 'all']),
|
|
output=dict(choices=['json', 'xml'], default='json'),
|
|
)
|
|
|
|
module = AnsibleModule(
|
|
argument_spec=argument_spec,
|
|
supports_check_mode=True
|
|
)
|
|
|
|
result = {'changed': False}
|
|
|
|
try:
|
|
response = restconf.get(module, **module.params)
|
|
except ConnectionError as exc:
|
|
module.fail_json(msg=to_text(exc), code=exc.code)
|
|
|
|
result.update({
|
|
'response': response,
|
|
})
|
|
|
|
module.exit_json(**result)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|