Source code for SoftLayer.managers.search

"""
    SoftLayer.search
    ~~~~~~~~~~~~~~~~
    Search Manager

    :license: MIT, see LICENSE for more details.
"""


[docs] class SearchManager(object): """Manager to help search via the SoftLayer API. :param SoftLayer.API.BaseClient client: the client instance """
[docs] def __init__(self, client): self.client = client self.search_manager = client['SoftLayer_Search']
[docs] def get_object_types(self): """returns a collection of SoftLayer_Container_Search_ObjectType containers.""" return self.search_manager.getObjectTypes()
[docs] def search(self, search_string): """allows for searching for SoftLayer resources by simple phrase.""" return self.search_manager.search(search_string)
[docs] def advanced(self, search_string): """Uses the SoftLayer_Search::advancedSearch API. Allows for more complicated search phrases.""" return self.search_manager.advancedSearch(search_string)
[docs] def search_instances(self, search_string, mask=None, **kwargs): """Lists VSIs based in the search_string. Also takes in a few search terms as \\*\\*kwargs. such as hostname, datacenter, domain and tags """ # This forces the Search API to do a fuzzy search on our term, kinda. Not sure why the ** are # Required but it will do an exact search without them. if search_string: search_string = f"*{search_string}*" search_string = f"_objectType:SoftLayer_Virtual_Guest {search_string}" if kwargs.get('hostname'): search_string = f"{search_string} hostname: *{kwargs.get('hostname')}*" if kwargs.get('domain'): search_string = f"{search_string} domain: *{kwargs.get('domain')}*" if kwargs.get('datacenter'): search_string = f"{search_string} datacenter.longName: *{kwargs.get('datacenter')}*" if kwargs.get('tags'): tags = " ".join(f"tagReferences.tag.name: \"{t}\"" for t in kwargs.get("tags", [])) search_string = f"{search_string} {tags}" result = self.search_manager.advancedSearch(search_string, mask=mask) guests = [] for resource in result: guests.append(resource.get('resource')) return guests
[docs] def search_hadrware_instances(self, search_string, mask=None, **kwargs): """Lists hardwares based in the search_string. Also takes in a few search terms as \\*\\*kwargs. such as hostname, datacenter, domain and tags """ # This forces the Search API to do a fuzzy search on our term, kinda. Not sure why the ** are # Required but it will do an exact search without them. if search_string: search_string = f"*{search_string}*" search_string = f"_objectType:SoftLayer_Hardware {search_string}" if kwargs.get('hostname'): search_string = f"{search_string} hostname: *{kwargs.get('hostname')}*" if kwargs.get('domain'): search_string = f"{search_string} domain: *{kwargs.get('domain')}*" if kwargs.get('cpu'): search_string = f"{search_string} cpu: *{kwargs.get('cpu')}*" if kwargs.get('network'): search_string = f"{search_string} network: *{kwargs.get('network')}*" if kwargs.get('memory'): search_string = f"{search_string} memory: *{kwargs.get('memory')}*" if kwargs.get('datacenter'): search_string = f"{search_string} datacenter.longName: *{kwargs.get('datacenter')}*" if kwargs.get('tags'): tags = " ".join(kwargs.get("tags", [])) search_string = f"{search_string} internalTagReferences.tag.name: {tags}" result = self.search_manager.advancedSearch(search_string, mask=mask) servers = [] for resource in result: servers.append(resource.get('resource')) return servers