|
15 | 15 | import salt.utils.platform |
16 | 16 | import salt.utils.stringutils |
17 | 17 |
|
18 | | - |
19 | 18 | try: |
20 | 19 | from pyVmomi import vim, vmodl |
21 | 20 |
|
@@ -435,6 +434,8 @@ def get_resource_pools( |
435 | 434 | if not resource_pool_names: |
436 | 435 | resource_pool_names = [] |
437 | 436 | if datacenter_name: |
| 437 | + import saltext.vmware.utils.datacenter as utils_datacenter |
| 438 | + |
438 | 439 | container_ref = utils_datacenter.get_datacenter(service_instance, datacenter_name) |
439 | 440 | else: |
440 | 441 | container_ref = get_root_folder(service_instance) |
@@ -737,84 +738,67 @@ def delete_datacenter(service_instance, datacenter_name): |
737 | 738 | wait_for_task(task, datacenter_name, "DeleteDatacenterTask") |
738 | 739 |
|
739 | 740 |
|
740 | | -def get_vm_datacenter(*, vm): |
| 741 | +def get_parent_of_type(mors, type): |
741 | 742 | """ |
742 | | - Return a datacenter from vm |
743 | | - """ |
744 | | - datacenter = None |
745 | | - while True: |
746 | | - if isinstance(vm, vim.Datacenter): |
747 | | - datacenter = vm |
748 | | - break |
749 | | - try: |
750 | | - vm = vm.parent |
751 | | - except AttributeError: |
752 | | - break |
753 | | - return datacenter |
754 | | - |
| 743 | + Finds the first parent of a managed object that matches the type specified. |
755 | 744 |
|
756 | | -def get_mors_type(obj, type): |
| 745 | + `None` is returned if no object is found. |
757 | 746 | """ |
758 | | - Return a vim type from managed object reference |
759 | | - """ |
760 | | - datacenter = None |
761 | 747 | while True: |
762 | | - if isinstance(obj, type): |
763 | | - datacenter = obj |
764 | | - break |
| 748 | + if isinstance(mors, type): |
| 749 | + return mors |
765 | 750 | try: |
766 | | - obj = obj.parent |
| 751 | + mors = mors.parent |
767 | 752 | except AttributeError: |
768 | | - break |
769 | | - return datacenter |
| 753 | + return None |
770 | 754 |
|
771 | 755 |
|
772 | | -def get_datastore(name, datacenter, service_instance): |
| 756 | +def find_filtered_object(service_instance, datacenter_name=None, cluster_name=None, host_name=None): |
773 | 757 | """ |
774 | | - Returns reference of datastore. |
775 | | -
|
776 | | - name |
777 | | - Name of datastore. |
778 | | -
|
779 | | - datacenter |
780 | | - Reference to datacenter. |
| 758 | + Finds zero or one matching objects: plug in almost any combination of datacenter, cluster, and/or host name. |
781 | 759 |
|
782 | | - service_instance |
783 | | - The Service Instance from which to obtain managed object references. |
784 | | - """ |
785 | | - if datacenter is None: |
786 | | - ds = get_mor_by_property(service_instance, vim.Datastore, name) |
787 | | - else: |
788 | | - ds = get_mor_by_property(service_instance, vim.Datastore, name, "name", datacenter) |
789 | | - return ds |
| 760 | + If cluster_name is passed, datacenter_name must also be passed. |
790 | 761 |
|
| 762 | + At least one of the optional parameters must be set. |
791 | 763 |
|
792 | | -def datastore_enter_maintenance_mode(datastore_ref): |
793 | | - """ |
794 | | - Put datastore in maintenance mode. |
| 764 | + The most specific object will be returned (if you pass host_name and datacenter_name, the host will be returned). |
795 | 765 |
|
796 | | - datastore_ref |
797 | | - Reference to datastore. |
798 | | - """ |
799 | | - ret = datastore_ref.DatastoreEnterMaintenanceMode() |
800 | | - if ret.task.info.state == "success": |
801 | | - return True |
802 | | - else: |
803 | | - return False |
| 766 | + service_instance |
| 767 | + The Service Instance Object from which to obtain cluster. |
804 | 768 |
|
| 769 | + datacenter_name |
| 770 | + (Optional) Datacenter name to filter by. |
805 | 771 |
|
806 | | -def datastore_exit_maintenance_mode(datastore_ref): |
807 | | - """ |
808 | | - Take datastore out of maintenance mode. |
| 772 | + cluster_name |
| 773 | + (Optional) Exact cluster name to filter by. If used, datacenter_name is required. |
809 | 774 |
|
810 | | - datastore_ref |
811 | | - Reference to datastore. |
| 775 | + host_name |
| 776 | + (Optional) Exact host name name to filter by. |
812 | 777 | """ |
813 | | - task = datastore_ref.DatastoreExitMaintenanceMode_Task() |
814 | | - wait_for_task(task, datastore_ref.name, "Take datastore out of maintenance mode") |
815 | | - if datastore_ref.summary.maintenanceMode == "normal": |
816 | | - return True |
817 | | - return False |
| 778 | + try: |
| 779 | + if host_name: |
| 780 | + import saltext.vmware.utils.esxi as utils_esxi |
| 781 | + |
| 782 | + hosts = utils_esxi.get_hosts( |
| 783 | + service_instance, |
| 784 | + datacenter_name=datacenter_name, |
| 785 | + cluster_name=cluster_name, |
| 786 | + host_names=[host_name], |
| 787 | + ) |
| 788 | + return hosts[0] if hosts else None |
| 789 | + elif cluster_name and datacenter_name: |
| 790 | + import saltext.vmware.utils.cluster as utils_cluster |
| 791 | + |
| 792 | + datacenter = get_datacenter(service_instance, datacenter_name) |
| 793 | + return utils_cluster.get_cluster(datacenter, cluster_name) |
| 794 | + elif datacenter_name: |
| 795 | + return get_datacenter(service_instance, datacenter_name=datacenter_name) |
| 796 | + else: |
| 797 | + raise salt.exceptions.ArgumentValueError( |
| 798 | + "find_filtered_object requires at least one of datacenter_name, host_name, or cluster_name with datacenter_name" |
| 799 | + ) |
| 800 | + except salt.exceptions.VMwareObjectRetrievalError: |
| 801 | + return None |
818 | 802 |
|
819 | 803 |
|
820 | 804 | def get_license_mgrs(service_instance, license_mgr_names=None, get_all_license_mgrs=False): |
|
0 commit comments