50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
# Copyright (c) 2017 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import common
|
|
import logging
|
|
|
|
from autotest_lib.server import frontend
|
|
from autotest_lib.server import site_utils
|
|
|
|
RF_SWITCH_LABEL = 'rf_switch'
|
|
LOCK_REASON = 'Locked for the tests.'
|
|
|
|
|
|
def allocate_rf_switch():
|
|
"""Allocates a RF Switch.
|
|
|
|
Locks the available RF Switch if it was discovered via AFE to prevent tests
|
|
stomping on each other.
|
|
|
|
@return an instance of AFE host object or None.
|
|
"""
|
|
afe = frontend.AFE(
|
|
debug=True, server=site_utils.get_global_afe_hostname())
|
|
# Get a list of hosts with label rf_switch that are not locked.
|
|
rf_switch_hosts = afe.get_hosts(label=RF_SWITCH_LABEL, locked=False)
|
|
if len(rf_switch_hosts) > 0:
|
|
for rf_switch in rf_switch_hosts:
|
|
# Lock the first available RF Switch in the list.
|
|
if afe.lock_host(rf_switch.hostname, LOCK_REASON):
|
|
return rf_switch
|
|
logging.error(
|
|
'RF Switch %s could not be locked' % rf_switch.hostname)
|
|
else:
|
|
logging.debug('No RF Switches are available for tests.')
|
|
|
|
|
|
def deallocate_rf_switch(rf_switch_host):
|
|
"""Unlocks a RF Switch.
|
|
|
|
@param rf_switch_host: an instance of AFE Host object to unlock.
|
|
|
|
@return True if rf_switch is unlocked, False otherwise.
|
|
"""
|
|
afe = frontend.AFE(
|
|
debug=True, server=site_utils.get_global_afe_hostname())
|
|
afe.unlock_hosts([rf_switch_host.hostname])
|
|
rf_switch = afe.get_hosts(hostnames=(rf_switch_host.hostname,))
|
|
return not rf_switch[0].locked
|