diff --git a/mce_lib_vsphere/core.py b/mce_lib_vsphere/core.py index 0caa70d..37a871a 100644 --- a/mce_lib_vsphere/core.py +++ b/mce_lib_vsphere/core.py @@ -130,7 +130,12 @@ def __init__( @typic.al def parse_url(self, url: str): - """Parse settings with URL""" + """Parse settings with URL + + Args: + url: Full url for connect to Vcenter + + """ url = furl(url) @@ -301,6 +306,7 @@ def get_vm_by_name( """ Get a VM by its name """ + # TODO: il peut y en avoir plusieurs ? search = re.compile("^%s$" % name, re.IGNORECASE) vm = self.get_object_by_name(vim.VirtualMachine, search, regex=regex) if not vm and raise_error: @@ -353,6 +359,9 @@ def get_all_clusters(self) -> List[vim.ClusterComputeResource]: @typic.al def get_all_datacenters(self) -> List[vim.Datacenter]: + """ + Get all datacenter on a vCenter + """ return self.get_all(self.content.rootFolder, vim.Datacenter) @typic.al @@ -369,20 +378,6 @@ def get_all_vms(self) -> List[vim.VirtualMachine]: """ return self.get_all(self.content.rootFolder, vim.VirtualMachine) - @typic.al - def get_hosts_in_datacenter(self, datacenter) -> List[vim.HostSystem]: - """ - Get all hosts belonging to a given datacenter - """ - return self.get_all(datacenter, vim.HostSystem) - - @typic.al - def get_vms_in_datacenter(self, datacenter) -> List[vim.VirtualMachine]: - """ - Get all vms belonging to a given datacenter - """ - return self.get_all(datacenter, vim.VirtualMachine) - @typic.al def get_all_dvswitches(self) -> List[vim.DistributedVirtualSwitch]: """ @@ -399,6 +394,55 @@ def get_all_dport_groups(self) -> List[vim.dvs.DistributedVirtualPortgroup]: self.content.rootFolder, vim.dvs.DistributedVirtualPortgroup ) + @typic.al + def get_all_virtualapps(self) -> List[vim.VirtualApp]: + """ + Get all VirtualApp + """ + return self.get_all(self.content.rootFolder, vim.VirtualApp) + + @typic.al + def get_all_networks(self) -> List[vim.Network]: + """ + Get all Network + """ + return self.get_all(self.content.rootFolder, vim.Network) + + @typic.al + def get_all_opaque_networks(self) -> List[vim.OpaqueNetwork]: + """ + Get all OpaqueNetwork + """ + return self.get_all(self.content.rootFolder, vim.OpaqueNetwork) + + @typic.al + def get_all_compute_resources(self) -> List[vim.ComputeResource]: + """ + Get all ComputeResource + """ + return self.get_all(self.content.rootFolder, vim.ComputeResource) + + @typic.al + def get_all_storage_pods(self) -> List[vim.StoragePod]: + """ + Get all StoragePod + """ + return self.get_all(self.content.rootFolder, vim.StoragePod) + + @typic.al + def get_hosts_in_datacenter(self, datacenter) -> List[vim.HostSystem]: + """ + Get all hosts belonging to a given datacenter + """ + return self.get_all(datacenter, vim.HostSystem) + + @typic.al + def get_vms_in_datacenter(self, datacenter) -> List[vim.VirtualMachine]: + """ + Get all vms belonging to a given datacenter + """ + return self.get_all(datacenter, vim.VirtualMachine) + @typic.al def is_valid_run_tools(self, vm: vim.VirtualMachine) -> bool: if not self.is_power_on(vm): @@ -477,8 +521,9 @@ def get_pool_infos(self, pool) -> Mapping: } def get_datastore_infos(self, datastore) -> Mapping: - """Get minimal informations of Datastore + """Get minimal informations of Datastore""" + """ Example return: { 'id': 'xxx', diff --git a/tests/mock_server.py b/tests/mock_server.py index d6c113c..2c98573 100644 --- a/tests/mock_server.py +++ b/tests/mock_server.py @@ -35,10 +35,12 @@ def vcsim_settings(): datacenters=2, clusters=2, # datacenters * 2 datastores=4, - storage=2, + storages=2, pools=1, hosts=3, # 14 ??? - vms=10 # 60 + vms=10, # 60 + vapps=2, + opaque_networks=1 ) # 10 resource pool @@ -50,7 +52,7 @@ def start_service(service_name, host, port, vcsim_settings): vcsim_settings["host"] = host vcsim_settings["port"] = port - args = "%(vcsim_path)s -api-version %(api_version)s -dc %(datacenters)s -cluster %(clusters)s -pool %(pools)s -host %(hosts)s -ds %(datastores)s -pod %(storage)s -vm %(vms)s -l %(host)s:%(port)s -username %(username)s -password %(password)s -trace" % vcsim_settings + args = "%(vcsim_path)s -api-version %(api_version)s -dc %(datacenters)s -cluster %(clusters)s -pool %(pools)s -host %(hosts)s -ds %(datastores)s -pod %(storages)s -vm %(vms)s -app %(vapps)s -nsx %(opaque_networks)s -l %(host)s:%(port)s -username %(username)s -password %(password)s -trace" % vcsim_settings # vcsim -api-version 6.5 -dc 2 -cluster 2 -pool 1 -host 3 -ds 4 -pod 2 -vm 10 -l 127.0.0.1:1024 -username user1 -password pass -trace process = sp.Popen(args.split(), stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.DEVNULL) diff --git a/tests/test_core.py b/tests/test_core.py index b4d80e2..2888c30 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -2,6 +2,7 @@ from freezegun import freeze_time import pytest +from pyVmomi import vim from mce_lib_vsphere import core @@ -116,7 +117,14 @@ def test_get_all_folders(vsphere_server, vcsim_settings): with core.Client(host=url) as client: client.connect() objects = client.get_all_folders() + assert len(objects) > 0 + + assert isinstance(objects[0], vim.Folder) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-3' + data = client.dump_to_dict(objects[0]) def test_get_all_hosts(vsphere_server, vcsim_settings): @@ -127,6 +135,15 @@ def test_get_all_hosts(vsphere_server, vcsim_settings): objects = client.get_all_hosts() assert len(objects) > 0 + + assert isinstance(objects[0], vim.HostSystem) is True + + #for host in objects: + # print(client.resource_id(host)) + + resource_id = client.resource_id(objects[0]) + #FIXME: assert resource_id == 'group-d1/datacenter-2/folder-4/clustercomputeresource-30/host-37' + data = client.dump_to_dict(objects[0]) def test_get_all_pools(vsphere_server, vcsim_settings): @@ -137,8 +154,15 @@ def test_get_all_pools(vsphere_server, vcsim_settings): objects = client.get_all_pools() assert len(objects) > 0 + + assert isinstance(objects[0], vim.ResourcePool) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-4/computeresource-26/resgroup-25' + data = client.dump_to_dict(objects[0]) + def test_get_all_clusters(vsphere_server, vcsim_settings): url = vsphere_server @@ -147,6 +171,12 @@ def test_get_all_clusters(vsphere_server, vcsim_settings): objects = client.get_all_clusters() assert len(objects) > 0 + + assert isinstance(objects[0], vim.ClusterComputeResource) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-4/clustercomputeresource-30' + data = client.dump_to_dict(objects[0]) def test_get_all_datacenters(vsphere_server, vcsim_settings): @@ -157,6 +187,12 @@ def test_get_all_datacenters(vsphere_server, vcsim_settings): objects = client.get_all_datacenters() assert len(objects) > 0 + + assert isinstance(objects[0], vim.Datacenter) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2' + data = client.dump_to_dict(objects[0]) def test_get_all_datastores(vsphere_server, vcsim_settings): @@ -167,6 +203,13 @@ def test_get_all_datastores(vsphere_server, vcsim_settings): objects = client.get_all_datastores() assert len(objects) > 0 + + assert isinstance(objects[0], vim.Datastore) is True + + resource_id = client.resource_id(objects[0]) + # FIXME: + #assert resource_id == 'group-d1/datacenter-2/folder-5//tmp/govcsim-dc0-localds_0-150284432@folder-5' + data = client.dump_to_dict(objects[0]) def test_get_all_vms(vsphere_server, vcsim_settings): @@ -177,6 +220,12 @@ def test_get_all_vms(vsphere_server, vcsim_settings): objects = client.get_all_vms() assert len(objects) > 0 + + assert isinstance(objects[0], vim.VirtualMachine) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-3/vm-231' + data = client.dump_to_dict(objects[0]) def test_get_all_dvswitches(vsphere_server, vcsim_settings): @@ -187,6 +236,12 @@ def test_get_all_dvswitches(vsphere_server, vcsim_settings): objects = client.get_all_dvswitches() assert len(objects) > 0 + + assert isinstance(objects[0], vim.DistributedVirtualSwitch) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-6/dvs-11' + data = client.dump_to_dict(objects[0]) def test_get_all_dport_groups(vsphere_server, vcsim_settings): @@ -197,6 +252,92 @@ def test_get_all_dport_groups(vsphere_server, vcsim_settings): objects = client.get_all_dport_groups() assert len(objects) > 0 + + assert isinstance(objects[0], vim.dvs.DistributedVirtualPortgroup) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-6/dvportgroup-13' + + data = client.dump_to_dict(objects[0]) + +def test_get_all_virtualapps(vsphere_server, vcsim_settings): + url = vsphere_server + + with core.Client(host=url) as client: + client.connect() + objects = client.get_all_virtualapps() + + assert len(objects) > 0 + + assert isinstance(objects[0], vim.VirtualApp) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-4/clustercomputeresource-30/resgroup-29/virtualapp-56' + + # FIXME: data = client.dump_to_dict(objects[0]) + +def test_get_all_networks(vsphere_server, vcsim_settings): + url = vsphere_server + + with core.Client(host=url) as client: + client.connect() + objects = client.get_all_networks() + + assert len(objects) > 0 + + assert isinstance(objects[0], vim.Network) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-6/network-7' + + data = client.dump_to_dict(objects[0]) + +def test_get_all_opaque_networks(vsphere_server, vcsim_settings): + url = vsphere_server + + with core.Client(host=url) as client: + client.connect() + objects = client.get_all_opaque_networks() + + assert len(objects) > 0 + + assert isinstance(objects[0], vim.OpaqueNetwork) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-6/opaquenetwork-16' + + data = client.dump_to_dict(objects[0]) + +def test_get_all_compute_resources(vsphere_server, vcsim_settings): + url = vsphere_server + + with core.Client(host=url) as client: + client.connect() + objects = client.get_all_compute_resources() + + assert len(objects) > 0 + + assert isinstance(objects[0], vim.ComputeResource) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-4/computeresource-26' + + data = client.dump_to_dict(objects[0]) + +def test_get_all_storage_pods(vsphere_server, vcsim_settings): + url = vsphere_server + + with core.Client(host=url) as client: + client.connect() + objects = client.get_all_storage_pods() + + assert len(objects) > 0 + + assert isinstance(objects[0], vim.StoragePod) is True + + resource_id = client.resource_id(objects[0]) + assert resource_id == 'group-d1/datacenter-2/folder-5/storagepod-8' + data = client.dump_to_dict(objects[0]) @pytest.mark.skip("FIXME data values") @@ -469,3 +610,4 @@ def test_resource_id(vsphere_server): dc = client.get_all_datacenters()[0] resource_id = client.resource_id(dc) assert resource_id == 'group-d1/datacenter-2' +