Пример #1
0
    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)
Пример #2
0
# 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..")
Пример #3
0
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)
Пример #4
0
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)