"""Cisco vManage Certificate API Methods.
"""
import json
from vmanage.api.http_methods import HttpMethods
from vmanage.data.parse_methods import ParseMethods
from vmanage.api.utilities import Utilities
[docs]class Certificate(object):
"""vManage Certificate API
Responsible for DELETE, GET, POST, PUT methods against vManage
Certificates.
"""
def __init__(self, session, host, port=443):
"""Initialize Device Inventory object with session parameters.
Args:
session (obj): Requests Session object
host (str): hostname or IP address of vManage
port (int): default HTTPS 443
"""
self.session = session
self.host = host
self.port = port
self.base_url = f'https://{self.host}:{self.port}/dataservice/certificate/'
[docs] def generate_csr(self, device_ip):
"""Generate CSR for device
Args:
device_ip (str): IP address of device.
Returns:
deviceCSR (str): The CSR for the device.
"""
payload = {"deviceIP": device_ip}
url = f"{self.base_url}generate/csr"
response = HttpMethods(self.session, url).request('POST', payload=json.dumps(payload))
result = ParseMethods.parse_data(response)
return result[0]['deviceCSR']
[docs] def install_device_cert(self, cert):
"""Install signed cert on vManage
Args:
cert (str): The certificate to install.
Returns:
id (str): The action ID of the install command.
"""
url = f"{self.base_url}install/signedCert"
response = HttpMethods(self.session, url).request('POST', payload=cert)
utilities = Utilities(self.session, self.host)
action_id = ParseMethods.parse_id(response)
utilities.waitfor_action_completion(action_id)
return action_id
[docs] def push_certificates(self):
"""Push certificates to all controllers
Returns:
id (str): The action ID of the push command.
"""
url = f"{self.base_url}vedge/list?action=push"
response = HttpMethods(self.session, url).request('POST', payload={})
utilities = Utilities(self.session, self.host)
action_id = ParseMethods.parse_id(response)
utilities.waitfor_action_completion(action_id)
return action_id
[docs] def get_vmanage_root_cert(self):
"""Get vManage root certificate
Args:
Returns:
rootcertificate (str): The root certificate.
"""
url = f"{self.base_url}rootcertificate"
response = HttpMethods(self.session, url).request('GET')
try:
return response['json']['rootcertificate']
except:
raise Exception('Error retrieving root certificate')