From cba4aed51e8bd967cf829010d6ddd4ac2c589448 Mon Sep 17 00:00:00 2001 From: oschwart Date: Sun, 25 Apr 2021 17:46:46 +0300 Subject: [PATCH] Add ssh_client option to Octavia validators module So far Octavia validators module didn't allow sending requests from given ssh clients (it used only the client_stack's ssh). This patch adds the option of providing an ssh_client parameter to the validators' request function. Change-Id: I24c259b569b3b0df09c319d2d1288de97d1ec5b3 --- tobiko/openstack/octavia/_validators.py | 32 +++++++------------------ 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/tobiko/openstack/octavia/_validators.py b/tobiko/openstack/octavia/_validators.py index 0eb5d2c47..e9179f9ea 100644 --- a/tobiko/openstack/octavia/_validators.py +++ b/tobiko/openstack/octavia/_validators.py @@ -17,10 +17,9 @@ from __future__ import absolute_import import time from oslo_log import log +import netaddr import tobiko -from tobiko.openstack import octavia -from tobiko.shell import ssh from tobiko.shell import sh @@ -28,34 +27,21 @@ LOG = log.getLogger(__name__) CURL_OPTIONS = "-f --connect-timeout 2 -g" -def request(client_stack, server_ip_address, protocol, server_port): - """Perform a request on a server. +def request(client_stack, ip_address, protocol, port, ssh_client=None): + ssh_client = ssh_client or client_stack.ssh_client - Returns the response in case of success, throws an RequestException - otherwise. - """ - if ':' in server_ip_address: - # Add square brackets around IPv6 address to please curl - server_ip_address = "[{}]".format(server_ip_address) - cmd = "curl {} {}://{}:{}/id".format( - CURL_OPTIONS, protocol.lower(), server_ip_address, server_port) + if netaddr.IPAddress(ip_address) == 6: + ip_address = f"[{ip_address}]" - ssh_client = ssh.ssh_client( - client_stack.floating_ip_address, - username=client_stack.image_fixture.username) + cmd = f"curl {CURL_OPTIONS} {protocol.lower()}://{ip_address}:{port}/id" - ret = sh.ssh_execute(ssh_client, cmd) - if ret.exit_status != 0: - raise octavia.RequestException(command=cmd, - error=ret.stderr) - - return ret.stdout + return sh.ssh_execute(ssh_client, cmd).stdout def check_members_balanced(pool_stack, client_stack, members_count, loadbalancer_vip, loadbalancer_protocol, - loadbalancer_port): + loadbalancer_port, ssh_client=None): """Check if traffic is properly balanced between members.""" @@ -66,7 +52,7 @@ def check_members_balanced(pool_stack, client_stack, for _ in range(members_count * 10): content = request( client_stack, loadbalancer_vip, - loadbalancer_protocol, loadbalancer_port) + loadbalancer_protocol, loadbalancer_port, ssh_client) if content not in replies: replies[content] = 0