
Enabling automatic pylint with tox and zull for each new patchset. Test plan: PASS: Run "tox -e pylint" in the terminal, this will: - Run pylint in all python files - Show the report Story: 2005051 Task: 47900 Change-Id: I2f66a5f72e3f8746c00aae96287ad3e4edb88e28 Signed-off-by: Lindley Werner <lindley.vieira@encora.com>
179 lines
5.5 KiB
Python
179 lines
5.5 KiB
Python
#!/usr/bin/python3
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
"""
|
|
This module provides functions to interact with a StarlingX controller-0 server via a
|
|
serial connection. The functions can be used to perform operations such as unlocking,
|
|
locking, rebooting, and installing a host. The module uses streamexpect library to
|
|
facilitate stream parsing.
|
|
"""
|
|
|
|
import time
|
|
import streamexpect
|
|
from consts.timeout import HostTimeout
|
|
from utils import serial
|
|
from utils.install_log import LOG
|
|
|
|
|
|
def unlock_host(stream, hostname):
|
|
"""
|
|
Unlocks given host
|
|
Args:
|
|
stream(stream): Stream to active controller
|
|
hostname(str): Name of host to unlock
|
|
Steps:
|
|
- Check that host is locked
|
|
- Unlock host
|
|
"""
|
|
|
|
LOG.info("#### Unlock %s", hostname)
|
|
serial.send_bytes(stream, f"system host-list | grep {hostname}", expect_prompt=False)
|
|
try:
|
|
serial.expect_bytes(stream, "locked")
|
|
except streamexpect.ExpectTimeout:
|
|
LOG.info("Host %s not locked", hostname)
|
|
return 1
|
|
serial.send_bytes(stream, f"system host-unlock {hostname}", expect_prompt=False)
|
|
LOG.info("Unlocking %s", hostname)
|
|
return None
|
|
|
|
|
|
def lock_host(stream, hostname):
|
|
"""
|
|
Locks the specified host.
|
|
Args:
|
|
stream(stream): Stream to controller-0
|
|
hostname(str): Name of host to lock
|
|
Steps:
|
|
- Check that host is unlocked
|
|
- Lock host
|
|
"""
|
|
|
|
LOG.info("Lock %s", hostname)
|
|
serial.send_bytes(stream, f"system host-list |grep {hostname}", expect_prompt=False)
|
|
try:
|
|
serial.expect_bytes(stream, "unlocked")
|
|
except streamexpect.ExpectTimeout:
|
|
LOG.info("Host %s not unlocked", hostname)
|
|
return 1
|
|
serial.send_bytes(stream, f"system host-lock {hostname}", expect_prompt="keystone")
|
|
LOG.info("Locking %s", hostname)
|
|
return None
|
|
|
|
|
|
def reboot_host(stream, hostname):
|
|
"""
|
|
Reboots host specified
|
|
Args:
|
|
stream():
|
|
hostname(str): Host to reboot
|
|
"""
|
|
|
|
LOG.info("Rebooting %s", hostname)
|
|
serial.send_bytes(stream, f"system host-reboot {hostname}", expect_prompt=False)
|
|
serial.expect_bytes(stream, "rebooting", HostTimeout.REBOOT)
|
|
|
|
|
|
def install_host(stream, hostname, host_type, host_id):
|
|
"""
|
|
Initiates install of specified host. Requires controller-0 to be installed already.
|
|
Args:
|
|
stream(stream): Stream to cont0
|
|
hostname(str): Name of host
|
|
host_type(str): Type of host being installed e.g. 'storage' or 'compute'
|
|
host_id(int): id to identify host
|
|
"""
|
|
|
|
time.sleep(10)
|
|
LOG.info("Installing %s with id %s", hostname, host_id)
|
|
if host_type == 'controller':
|
|
serial.send_bytes(stream,
|
|
f"system host-update {host_id} personality=controller",
|
|
expect_prompt=False)
|
|
elif host_type == 'storage':
|
|
serial.send_bytes(stream,
|
|
f"system host-update {host_id} personality=storage",
|
|
expect_prompt=False)
|
|
else:
|
|
serial.send_bytes(stream,
|
|
f"system host-update {host_id} personality=compute hostname={hostname}",
|
|
expect_prompt=False)
|
|
time.sleep(30)
|
|
|
|
|
|
def disable_logout(stream):
|
|
"""
|
|
Disables automatic logout of users.
|
|
Args:
|
|
stream(stream): stream to cont0
|
|
"""
|
|
|
|
LOG.info('Disabling automatic logout')
|
|
serial.send_bytes(stream, "export TMOUT=0")
|
|
|
|
|
|
def change_password(stream, username="sysadmin", password="Li69nux*"):
|
|
"""
|
|
changes the default password on initial login.
|
|
Args:
|
|
stream(stream): stream to cont0
|
|
"""
|
|
|
|
LOG.info('Changing password to Li69nux*')
|
|
serial.send_bytes(stream, username, expect_prompt=False)
|
|
serial.expect_bytes(stream, "Password:")
|
|
serial.send_bytes(stream, username, expect_prompt=False)
|
|
serial.expect_bytes(stream, "Current password:")
|
|
serial.send_bytes(stream, username, expect_prompt=False)
|
|
serial.expect_bytes(stream, "New password:")
|
|
serial.send_bytes(stream, password, expect_prompt=False)
|
|
serial.expect_bytes(stream, "Retype new password")
|
|
serial.send_bytes(stream, password)
|
|
|
|
|
|
def login(stream, timeout=600, username="sysadmin", password="Li69nux*"):
|
|
"""
|
|
Logs into controller-0.
|
|
Args:
|
|
stream(stream): stream to cont0
|
|
timeout(int): Time before login fails in seconds.
|
|
"""
|
|
|
|
serial.send_bytes(stream, "\n", expect_prompt=False)
|
|
login_result = serial.expect_bytes(stream, "ogin:", fail_ok=True, timeout=timeout)
|
|
if login_result != 0:
|
|
serial.send_bytes(stream, "\n", expect_prompt=False)
|
|
if serial.expect_bytes(stream, "~$", timeout=10, fail_ok=True) == -1:
|
|
serial.send_bytes(stream, '\n', expect_prompt=False)
|
|
serial.expect_bytes(stream, "keystone", timeout=10)
|
|
else:
|
|
serial.send_bytes(stream, username, expect_prompt=False)
|
|
serial.expect_bytes(stream, "assword:")
|
|
serial.send_bytes(stream, password)
|
|
disable_logout(stream)
|
|
|
|
|
|
def logout(stream):
|
|
"""
|
|
Logs out of controller-0.
|
|
Args:
|
|
stream(stream): stream to cont0
|
|
"""
|
|
|
|
serial.send_bytes(stream, "exit", expect_prompt=False)
|
|
time.sleep(5)
|
|
|
|
|
|
def check_password(stream, password="Li69nux*"):
|
|
"""
|
|
Checks the password.
|
|
Args:
|
|
stream(stream): Stream to cont0
|
|
password(str): password to check.
|
|
"""
|
|
ret = serial.expect_bytes(stream, 'assword', fail_ok=True, timeout=5)
|
|
if ret == 0:
|
|
serial.send_bytes(stream, password, expect_prompt=False)
|