Skip to content

Commit 0983bb9

Browse files
#1862 added search features to vs list, and unit tests
1 parent 179318c commit 0983bb9

File tree

5 files changed

+45
-54
lines changed

5 files changed

+45
-54
lines changed

SoftLayer/CLI/virt/list.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from SoftLayer.CLI import environment
1010
from SoftLayer.CLI import formatting
1111
from SoftLayer.CLI import helpers
12-
from SoftLayer import utils
1312

1413
# pylint: disable=unnecessary-lambda
1514

@@ -45,12 +44,6 @@
4544
'action',
4645
]
4746

48-
def search_callback(ctx, param, value):
49-
print(f"SEARCH_CALLBACK: value: {value}")
50-
if not value:
51-
print("Value is true now")
52-
value = True
53-
return value
5447

5548
@click.command(cls=SLCommand, short_help="List virtual servers.")
5649
@click.option('--cpu', '-c', help='Number of CPU cores', type=click.INT)
@@ -62,7 +55,7 @@ def search_callback(ctx, param, value):
6255
@click.option('--hourly', is_flag=True, help='Show only hourly instances')
6356
@click.option('--monthly', is_flag=True, help='Show only monthly instances')
6457
@click.option('--transient', help='Filter by transient instances', type=click.BOOL)
65-
@click.option('--search', is_flag=False, flag_value="", default=None,
58+
@click.option('--search', is_flag=False, flag_value="", default=None,
6659
help="Use the more flexible Search API to list instances. See `slcli search --types` for list " +
6760
"of searchable fields.")
6861
@helpers.multi_option('--tag', help='Filter by tags')
@@ -82,9 +75,9 @@ def cli(env, sortby, cpu, domain, datacenter, hostname, memory, network,
8275

8376
guests = []
8477
if search is not None:
85-
sm = SoftLayer.SearchManager(env.client)
86-
guests = sm.search_instances(hostname=hostname, domain=domain, datacenter=datacenter,
87-
tags=tag, search_string=search, mask=columns.mask())
78+
search_manager = SoftLayer.SearchManager(env.client)
79+
guests = search_manager.search_instances(hostname=hostname, domain=domain, datacenter=datacenter,
80+
tags=tag, search_string=search, mask=columns.mask())
8881
else:
8982
vsi = SoftLayer.VSManager(env.client)
9083
guests = vsi.list_instances(hourly=hourly, monthly=monthly, hostname=hostname, domain=domain,
@@ -99,4 +92,3 @@ def cli(env, sortby, cpu, domain, datacenter, hostname, memory, network,
9992
for value in columns.row(guest)])
10093

10194
env.fout(table)
102-

SoftLayer/managers/search.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def search_instances(self, search_string, mask=None, **kwargs):
4141
Also takes in a few search terms as **kwargs. such as hostname, datacenter, domain and tags
4242
"""
4343

44-
# This forces the Search API to do a fuzzy search on our term, kinda. Not sure why the ** are
44+
# This forces the Search API to do a fuzzy search on our term, kinda. Not sure why the ** are
4545
# Required but it will do an exact search without them.
4646
if search_string:
4747
search_string = f"*{search_string}*"
@@ -54,11 +54,10 @@ def search_instances(self, search_string, mask=None, **kwargs):
5454
search_string = f"{search_string} datacenter.longName: *{kwargs.get('datacenter')}*"
5555
if kwargs.get('tags'):
5656
tags = " ".join(kwargs.get("tags", []))
57-
search_string = f"{search_string} internalTagReferences.tag.name: {kwargs.get('tags')}"
58-
result = self.search_manager.advancedSearch(search_string)
57+
search_string = f"{search_string} internalTagReferences.tag.name: {tags}"
58+
result = self.search_manager.advancedSearch(search_string, mask=mask)
5959
guests = []
60-
for x in result:
61-
guests.append(x.get('resource'))
60+
for resource in result:
61+
guests.append(resource.get('resource'))
6262

6363
return guests
64-

tests/CLI/modules/vs/vs_tests.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,23 @@ def test_list_vs(self):
145145

146146
self.assert_no_fail(result)
147147

148+
def test_list_vs_search_noargs(self):
149+
result = self.run_command(['vs', 'list', '--search'])
150+
self.assert_no_fail(result)
151+
self.assert_called_with('SoftLayer_Search', 'advancedSearch', args=('_objectType:SoftLayer_Virtual_Guest ',))
152+
153+
def test_list_vs_search_noargs_domain(self):
154+
result = self.run_command(['vs', 'list', '--search', '-Dtest'])
155+
self.assert_no_fail(result)
156+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
157+
args=('_objectType:SoftLayer_Virtual_Guest domain: *test*',))
158+
159+
def test_list_vs_search_args(self):
160+
result = self.run_command(['vs', 'list', '--search=thisTerm'])
161+
self.assert_no_fail(result)
162+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
163+
args=('_objectType:SoftLayer_Virtual_Guest *thisTerm*',))
164+
148165
@mock.patch('SoftLayer.utils.lookup')
149166
def test_detail_vs_empty_billing(self, mock_lookup):
150167
def mock_lookup_func(dic, key, *keys):
@@ -919,10 +936,6 @@ def test_vs_migrate_exception(self):
919936
self.assert_called_with('SoftLayer_Virtual_Guest', 'migrate', identifier=100)
920937
self.assert_not_called_with('SoftLayer_Virtual_Guest', 'migrateDedicatedHost', args=(999), identifier=100)
921938

922-
def test_list_vsi(self):
923-
result = self.run_command(['vs', 'list', '--hardware'])
924-
self.assert_no_fail(result)
925-
926939
def test_credentail(self):
927940
result = self.run_command(['vs', 'credentials', '100'])
928941
self.assert_no_fail(result)

tests/managers/search_tests.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,22 @@ def test_search(self):
2525
def test_search_advanced(self):
2626
self.search.advanced('SoftLayer_Hardware')
2727
self.assert_called_with('SoftLayer_Search', 'advancedSearch')
28+
29+
def test_search_instances_basic(self):
30+
search_string = "TEST_STRING"
31+
expected = f"_objectType:SoftLayer_Virtual_Guest *{search_string}*"
32+
self.search.search_instances(search_string)
33+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
34+
args=(expected,))
35+
self.search.search_instances(search_string, hostname="thisHostname")
36+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
37+
args=(f"{expected} hostname: *thisHostname*",))
38+
self.search.search_instances(search_string, domain="thisDomain")
39+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
40+
args=(f"{expected} domain: *thisDomain*",))
41+
self.search.search_instances(search_string, datacenter="dal13")
42+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
43+
args=(f"{expected} datacenter.longName: *dal13*",))
44+
self.search.search_instances(search_string, tags=["thisTag"])
45+
self.assert_called_with('SoftLayer_Search', 'advancedSearch',
46+
args=(f"{expected} internalTagReferences.tag.name: thisTag",))

tests/managers/vs/vs_tests.py

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,38 +1278,6 @@ def test_migrate_dedicated(self):
12781278
self.assertTrue(result)
12791279
self.assert_called_with('SoftLayer_Virtual_Guest', 'migrateDedicatedHost', args=(5555,), identifier=1234)
12801280

1281-
def test_get_hardware_guests(self):
1282-
mock = self.set_mock('SoftLayer_Account', 'getHardware')
1283-
mock.return_value = [{
1284-
"accountId": 11111,
1285-
"domain": "vmware.chechu.com",
1286-
"hostname": "host14",
1287-
"id": 22222,
1288-
"virtualHost": {
1289-
"accountId": 11111,
1290-
"id": 33333,
1291-
"name": "host14.vmware.chechu.com",
1292-
"guests": [
1293-
{
1294-
"accountId": 11111,
1295-
"hostname": "NSX-T Manager",
1296-
"id": 44444,
1297-
"maxCpu": 16,
1298-
"maxCpuUnits": "CORE",
1299-
"maxMemory": 49152,
1300-
"powerState": {
1301-
"keyName": "RUNNING",
1302-
"name": "Running"
1303-
},
1304-
"status": {
1305-
"keyName": "ACTIVE",
1306-
"name": "Active"
1307-
}
1308-
}]}}]
1309-
1310-
result = self.vs.get_hardware_guests()
1311-
self.assertEqual("NSX-T Manager", result[0]['virtualHost']['guests'][0]['hostname'])
1312-
13131281
def test_authorize_storage(self):
13141282
options = self.vs.authorize_storage(1234, "SL01SEL301234-11")
13151283

0 commit comments

Comments
 (0)