mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2025-10-26 13:56:09 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # This code is part of Ansible, but is an independent component.
 | |
| # This particular file snippet, and this file snippet only, is BSD licensed.
 | |
| # Modules you write using this snippet, which is embedded dynamically by Ansible
 | |
| # still belong to the author of the module, and may assign their own license
 | |
| # to the complete work.
 | |
| #
 | |
| # (c) 2016, Ted Elhourani <ted@bigswitch.com>
 | |
| #
 | |
| #
 | |
| # Redistribution and use in source and binary forms, with or without modification,
 | |
| # are permitted provided that the following conditions are met:
 | |
| #
 | |
| #    * Redistributions of source code must retain the above copyright
 | |
| #      notice, this list of conditions and the following disclaimer.
 | |
| #    * Redistributions in binary form must reproduce the above copyright notice,
 | |
| #      this list of conditions and the following disclaimer in the documentation
 | |
| #      and/or other materials provided with the distribution.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | |
| # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
| # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | |
| # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 | |
| # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| import json
 | |
| 
 | |
| from ansible.module_utils.urls import fetch_url
 | |
| 
 | |
| 
 | |
| class Response(object):
 | |
| 
 | |
|     def __init__(self, resp, info):
 | |
|         self.body = None
 | |
|         if resp:
 | |
|             self.body = resp.read()
 | |
|         self.info = info
 | |
| 
 | |
|     @property
 | |
|     def json(self):
 | |
|         if not self.body:
 | |
|             if "body" in self.info:
 | |
|                 return json.loads(self.info["body"])
 | |
|             return None
 | |
|         try:
 | |
|             return json.loads(self.body)
 | |
|         except ValueError:
 | |
|             return None
 | |
| 
 | |
|     @property
 | |
|     def status_code(self):
 | |
|         return self.info["status"]
 | |
| 
 | |
| 
 | |
| class Rest(object):
 | |
| 
 | |
|     def __init__(self, module, headers, baseurl):
 | |
|         self.module = module
 | |
|         self.headers = headers
 | |
|         self.baseurl = baseurl
 | |
| 
 | |
|     def _url_builder(self, path):
 | |
|         if path[0] == '/':
 | |
|             path = path[1:]
 | |
|         return '%s/%s' % (self.baseurl, path)
 | |
| 
 | |
|     def send(self, method, path, data=None, headers=None):
 | |
|         url = self._url_builder(path)
 | |
|         data = self.module.jsonify(data)
 | |
| 
 | |
|         resp, info = fetch_url(self.module, url, data=data, headers=self.headers, method=method)
 | |
| 
 | |
|         return Response(resp, info)
 | |
| 
 | |
|     def get(self, path, data=None, headers=None):
 | |
|         return self.send('GET', path, data, headers)
 | |
| 
 | |
|     def put(self, path, data=None, headers=None):
 | |
|         return self.send('PUT', path, data, headers)
 | |
| 
 | |
|     def post(self, path, data=None, headers=None):
 | |
|         return self.send('POST', path, data, headers)
 | |
| 
 | |
|     def patch(self, path, data=None, headers=None):
 | |
|         return self.send('PATCH', path, data, headers)
 | |
| 
 | |
|     def delete(self, path, data=None, headers=None):
 | |
|         return self.send('DELETE', path, data, headers)
 |