def print_labs(self): """ Get list of labs from CML2 server and print it formatted on console. :raises requests.exceptions.HTTPError: if there was a transport error """ cl = ClientLibrary(url="https://" + self._cmlnetkitconfig.host, username=self._cmlnetkitconfig.username, password=self._cmlnetkitconfig.password, ssl_verify=self._cmlnetkitconfig.ssl_verify) cl.wait_for_lld_connected() labs = cl.all_labs() print('\nLab ID\tLab Title') for lab in labs: print(lab.id + '\t' + lab.title)
# login to cml try: urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) client = ClientLibrary("https://192.168.137.252", username, password, ssl_verify=False) client.is_system_ready() except: print( f"\nUnable to contact CML2.x server, please check server connectivity." ) # get list of labs all_labs = client.all_labs() # check if programmatic_network_build exists if 'programmatic_network_build' in [lab.title for lab in all_labs]: print(f"\nprogrammatic_network_build exists, deleting lab..") lab = client.find_labs_by_title(title='programmatic_network_build')[0] try: lab.stop() lab.wipe() lab.remove() except Exception as e: print(f"Unable to stop programmatic_network_build lab, error: {e}") print(f"\nprogrammatic_network_build has been successfully deleted..") print(f"\nprogrammatic_network_build doesn't exist, creating lab..")
def test_user_role_change(controller_url, client_library_session: ClientLibrary): cl_admin = client_library_session cl_admin_uid = client_library_session.user_management.user_id( cl_admin.username) # create non admin users cl_user1, cl_user2 = "cl_user1", "cl_user2" password = "******" res = cl_admin.user_management.create_user(username=cl_user1, pwd=password) cl_user1_uid = res["id"] res = cl_admin.user_management.create_user(username=cl_user2, pwd=password) cl_user2_uid = res["id"] cl_user1 = ClientLibrary( controller_url, username=cl_user1, password=password, ssl_verify=False, allow_http=True, ) cl_user2 = ClientLibrary( controller_url, username=cl_user2, password=password, ssl_verify=False, allow_http=True, ) cl_user1.create_lab("lab1-cl_user1") cl_user1.create_lab("lab2-cl_user1") assert cl_user2.all_labs(show_all=True) == [] # promote cl_user2 to admin cl_admin.user_management.update_user(user_id=cl_user2_uid, admin=True) # check if cl_user2 can see all the labs as admin all_labs = cl_user2.all_labs(show_all=True) assert len(all_labs) == 2 assert all_labs[0].owner == cl_user1_uid # check if cl_user2 can create user and delete users res = cl_user2.user_management.create_user(username="******", pwd=password) assert cl_user2.user_management.get_user(user_id=res["id"]) cl_user2.user_management.delete_user(user_id=res["id"]) with pytest.raises(requests.exceptions.HTTPError) as err: cl_user2.user_management.get_user(user_id=res["id"]) assert err.value.response.status_code == 404 # check cl_user2 can see licensing assert cl_user2.licensing.status() for lab in all_labs: cl_user2.remove_lab(lab.id) assert cl_user2.all_labs(show_all=True) == [] # promote cl_user1 to admin cl_admin.user_management.update_user(user_id=cl_user1_uid, admin=True) # check if cl_user1 can remove admin cl_user2 cl_user1.user_management.delete_user(user_id=cl_user2_uid) with pytest.raises(requests.exceptions.HTTPError) as err: cl_user1.user_management.get_user(user_id=cl_user2_uid) assert err.value.response.status_code == 404 # remove admin rights from cl_user1 cl_admin.user_management.update_user(user_id=cl_user1_uid, admin=False) lab = cl_admin.create_lab("origin-lab") assert cl_user1.all_labs(show_all=True) == [] with pytest.raises(requests.exceptions.HTTPError) as err: cl_user1.user_management.create_user(username="******", pwd=password) assert err.value.response.status_code == 403 with pytest.raises(requests.exceptions.HTTPError) as err: cl_user1.licensing.status() assert err.value.response.status_code == 403 cl_admin.user_management.delete_user(user_id=cl_user1_uid) # check that user cannot update its own user role with pytest.raises(requests.exceptions.HTTPError) as err: cl_admin.user_management.update_user(user_id=cl_admin_uid, admin=False) assert err.value.response.status_code == 400 # cleanup cl_admin.remove_lab(lab.id)
class virlModule(object): def __init__(self, module, function=None): self.module = module self.params = module.params self.result = dict(changed=False) self.headers = dict() self.function = function self.cookies = None self.json = None self.method = None self.path = None self.response = None self.status = None self.url = None self.params['force_basic_auth'] = True self.user = self.params['user'] self.password = self.params['password'] self.host = self.params['host'] self.timeout = self.params['timeout'] self.modifiable_methods = ['POST', 'PUT', 'DELETE'] self.client = None self.login() def login(self): self.client = ClientLibrary('https://{0}'.format(self.host), self.user, self.password, ssl_verify=False) def get_lab_by_name(self, name): for lab in self.client.all_labs(): if lab.name == name: return lab return None def get_node_by_name(self, lab, name): for node in lab.nodes(): if node.label == name: return node return None def get_lab_by_id(self, lab_id): try: lab = self.client.join_existing_lab(lab_id, sync_lab=True) except Exception: lab = None return lab def exit_json(self, **kwargs): self.result.update(**kwargs) self.module.exit_json(**self.result) def fail_json(self, msg, **kwargs): self.result.update(**kwargs) self.module.fail_json(msg=msg, **self.result)