diff options
Diffstat (limited to 'tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/ctdb_libs.py')
| -rw-r--r-- | tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/ctdb_libs.py | 586 |
1 files changed, 0 insertions, 586 deletions
diff --git a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/ctdb_libs.py b/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/ctdb_libs.py deleted file mode 100644 index 0e4571a706c..00000000000 --- a/tests/distaf/distaf_libs/distaflibs-gluster/distaflibs/gluster/ctdb_libs.py +++ /dev/null @@ -1,586 +0,0 @@ -#!/usr/bin/env python -# This file is part of DiSTAF -# Copyright (C) 2015-2016 Red Hat, Inc. <http://www.redhat.com> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -""" - Description: Library for setting up CTDB on gluster setup -""" -import time -import re -from distaf.util import tc -from distaflibs.gluster.volume_ops import start_volume -from distaflibs.gluster.peer_ops import peer_probe_servers - - -def ctdb_firewall_settings(servers=None): - '''Firewall settings required for setting up CTDB - Kwargs: - servers (list): The list of servers on which we need - to add firewall settings for setting up CTDB. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - ctdb_firewall_settings() - ''' - if servers is None: - servers = tc.global_config['cluster_config']['smb']['ctdb_servers'] - if not isinstance(servers, list): - servers = [servers] - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - _rc = True - for server in servers: - ret, out, _ = tc.run(server, "cat /etc/redhat-release") - if not ret: - match = re.search('.*release (\d+).*', out) - if match is None: - tc.logger.error("Failed to find OS version") - return False - if match.group(1) == '7': - ret, out, err = tc.run(server, "service firewalld start") - if ret != 0: - tc.logger.error("Failed to start firewalld") - ret, _, _ = tc.run(server, "firewall-cmd --zone=public " - "--add-service=samba --add-service=" - "glusterfs") - if ret != 0: - tc.logger.error("Failed to set firewall zone for samba") - _rc = False - ret, _, _ = tc.run(server, "firewall-cmd --zone=public " - "--add-service=samba --add-service=" - "glusterfs --permanent") - if ret != 0: - tc.logger.error("Failed to set firewall zone for samba" - " permanently") - _rc = False - - ret, _, _ = tc.run(server, "firewall-cmd --zone=public " - "--add-port=4379/tcp") - if ret != 0: - tc.logger.error("Failed to add port for samba") - _rc = False - ret, _, _ = tc.run(server, "firewall-cmd --zone=public " - "--add-port=4379/tcp --permanent") - if ret != 0: - tc.logger.error("Failed to add port for samba permanently") - _rc = False - return _rc - - -def update_smb_conf(servers=None): - '''Update the /etc/samba/smb.conf file. - Adds a parameter called clustering=yes. - Kwargs: - servers (list): The list of servers on which we need - to update the /etc/samba/smb.conf file. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - update_smb_conf() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - file_path = "/etc/samba/smb.conf" - if not isinstance(servers, list): - servers = [servers] - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - _rc = True - for server in servers: - ret, _, _ = tc.run(server, "grep 'clustering=yes' %s" % file_path) - if ret == 0: - tc.logger.info("%s file is already edited") - continue - ret, _, _ = tc.run(server, "sed -i '/^\[global\]/a clustering=yes' %s" - % file_path) - if ret != 0: - tc.logger.error("failed to edit %s file on %s" - % (file_path, server)) - _rc = False - - return _rc - - -def update_hook_scripts(servers=None): - '''Update the hook scripts. - Changes the META parameter value from "all" to "ctdb". - Kwargs: - servers (list): The list of servers on which we need - to update the hook scripts. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - update_hook_scripts() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - file1_path = "/var/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh" - file2_path = "/var/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh" - _rc = True - if not isinstance(servers, list): - servers = [servers] - for server in servers: - ret, _, _ = tc.run(server, "sed -i s/'META=\"all\"'/'META=\"ctdb\"'/g" - " %s %s" % (file1_path, file2_path)) - if ret != 0: - tc.logger.error("failed to edit %s hook-script on %s" - % (file_path, server)) - _rc = False - - return _rc - - -def create_ctdb_nodes_file(servers=None): - '''Creates the /etc/ctdb/nodes file. - This file will have a list of IPs of all the servers. - Kwargs: - servers (list): The list of servers on which we need - to update the /etc/ctdb/nodes file. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - create_ctdb_nodes_file() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - file_path = "/etc/ctdb/nodes" - _rc = True - ctdb_ips_list = [] - if not isinstance(servers, list): - servers = [servers] - for server in servers: - ret, out, _ = tc.run(server, "hostname -i") - if ret != 0: - tc.logger.error("failed to get ip of %s" % server) - _rc = False - ctdb_ips_list.append(out) - for server in servers: - conn = tc.get_connection(server, "root") - try: - FH = conn.builtin.open(file_path, "w") - FH.write("".join(ctdb_ips_list)) - except IOError as e: - tc.logger.error(e) - _rc = False - finally: - FH.close() - - return _rc - - -def create_ctdb_meta_volume(mnode=None, servers=None, meta_volname=None): - '''Creates meta volume for ctdb setup - Kwargs: - mnode (str): Node on which the command has - to be executed. Default value is ctdb_servers[0]. - servers (list): The list of servers on which we need - the meta volume to be created. - Defaults to ctdb_servers as specified in the config file. - meta_volname (str) : Name for the ctdb meta volume. - Dafault ctdb meta volume name is "ctdb". - Returns: - bool: True if successful, False otherwise - Example: - create_ctdb_meta_volume() - ''' - if mnode is None: - mnode = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers'][0]['host']) - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - if meta_volname is None: - meta_volname = "ctdb" - replica_count = len(servers) - brick_list = "" - brick_path = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_metavol_brick_path']) - if not isinstance(servers, list): - servers = [servers] - for i, server in enumerate(servers): - brick_list = (brick_list + "%s:%s/ctdb_brick%s " - % (server, brick_path, i)) - ret, _, _ = tc.run(mnode, "gluster volume create %s replica %s %s force " - "--mode=script" % (meta_volname, replica_count, - brick_list)) - if ret != 0: - tc.logger.error("failed to create meta volume ctdb") - return False - - return True - - -def check_if_gluster_lock_mount_exists(servers=None): - '''Checks if /gluster/lock mount exists - Kwargs: - servers (list): The list of servers on which we need - to check if /gluster/lock mount exists. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - check_if_gluster_lock_mount_exists() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - if not isinstance(servers, list): - servers = [servers] - _rc = True - for server in servers: - ret, _, _ = tc.run(server, "cat /proc/mounts | grep '/gluster/lock'") - if ret != 0: - tc.logger.error("/gluster/lock mount does not exist on %s" - % server) - _rc = False - - return _rc - - -def check_if_ctdb_file_exists(servers=None): - '''Checks if /etc/sysconfig/ctdb file exists - Kwargs: - servers (list): The list of servers on which we need - to check if /etc/sysconfig/ctdb file exists. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - check_if_ctdb_file_exists() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - file_path = "/etc/sysconfig/ctdb" - if not isinstance(servers, list): - servers = [servers] - _rc = True - for server in servers: - conn = tc.get_connection(server, "root") - if not conn.modules.os.path.isfile(file_path): - tc.logger.error("%s file not found on %s" % (file_path, server)) - _rc = False - conn.close() - - return _rc - - -def create_ctdb_public_addresses(servers=None): - '''Creates the /etc/ctdb/public_addresses file. - This file will have a list of vips, routing-prefix and interface, - in the following format - vip/routing-prefix interface. - Kwargs: - servers (list): The list of servers on which we need - to create the /etc/ctdb/public_addresses file. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - create_ctdb_public_addresses() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - ctdb_vips = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_vips']) - if not isinstance(servers, list): - servers = [servers] - _rc = True - data_to_write = "" - file_path = "/etc/ctdb/public_addresses" - for each_vip in ctdb_vips: - data_to_write = (data_to_write + each_vip['vip'] + "/" + - str(each_vip['routing_prefix']) + " " + - each_vip['interface'] + "\n") - for server in servers: - conn = tc.get_connection(server, "root") - try: - FH = conn.builtin.open(file_path, "w") - FH.write(data_to_write) - except IOError as e: - tc.logger.error(e) - _rc = False - finally: - FH.close() - - return _rc - - -def start_ctdb_service(servers=None): - '''Starts the CTDB service - Kwargs: - servers (list): The list of servers on which we need - to start the CTDB service. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - start_ctdb_service() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - if not isinstance(servers, list): - servers = [servers] - _rc = True - for server in servers: - ret, _, _ = tc.run(server, "service ctdb start") - if ret != 0: - tc.logger.error("failed to start the ctdb service on %s" % server) - _rc = False - - return _rc - - -def verify_ctdb_status(mnode=None): - '''Verifies the ctdb status. - For each server ip mentioned in /etc/ctdb/nodes file, - it checks if the ctdb status is OK for it. - Kwargs: - mnode (str): Node on which the command has - to be executed. Default value is ctdb_servers[0]. - Returns: - bool: True if successful, False otherwise - Example: - verify_ctdb_status() - ''' - if mnode is None: - mnode = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers'][0]['host']) - _rc = True - ret, out, _ = tc.run(mnode, "cat /etc/ctdb/nodes") - if ret != 0: - tc.logger.error("failed to get the details of /etc/ctdb/nodes file") - return False - servers_list = out.strip().split("\n") - ret, out, _ = tc.run(mnode, "ctdb status | grep pnn") - if ret != 0: - tc.logger.error("failed to get the details of ctdb status") - return False - status_list = out.strip().split("\n") - for status in status_list: - for server in servers_list: - if server in status: - if "OK" in status: - tc.logger.info("ctdb status for %s is OK" % server) - else: - tc.logger.error("ctdb status for %s is not OK" % server) - _rc = False - - return _rc - - -def ctdb_gluster_setup(mnode=None, servers=None, meta_volname=None): - '''Setup CTDB on gluster setup - Kwargs: - mnode (str): Node on which the command has - to be executed. Default value is ctdb_servers[0] - servers (list): The list of servers on which we need - the CTDB setup. - Defaults to ctdb_servers as specified in the config file. - meta_volname (str) : Name for the ctdb meta volume. - Dafault ctdb meta volume name is "ctdb". - Returns: - bool: True if successful, False otherwise - Example: - ctdb_gluster_setup() - ''' - if mnode is None: - mnode = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers'][0]['host']) - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - if not isinstance(servers, list): - servers = [servers] - no_of_ctdb_servers = len(servers) - if meta_volname is None: - meta_volname = "ctdb" - - # 1. firewall setting for ctdb setup - ret = ctdb_firewall_settings(servers[:]) - if ret: - tc.logger.info("firewall settings successfull for ctdb setup") - else: - tc.logger.error("firewall settings failed for ctdb setup") - return False - - # 2. peer probe - ret = peer_probe_servers(servers[:], mnode=mnode) - if not ret: - return False - - # 3. create ctdb meta volume - ret = create_ctdb_meta_volume(mnode, servers[:], meta_volname) - if ret: - tc.logger.info("successfully created ctdb meta volume") - else: - tc.logger.error("failed to create ctdb meta volume") - return False - tc.run(mnode, "gluster v info %s" % meta_volname) - - # 4. update the ctdb hook scripts - ret = update_hook_scripts(servers[:]) - if ret: - tc.logger.info("successfully updated the hook scripts on all servers") - else: - tc.logger.error("failed to update the hook scripts on " - "one or more servers") - return False - - # 5. update the smb.conf file - ret = update_smb_conf(servers[:]) - if ret: - tc.logger.info("successfully updated the smb.conf file on all servers") - else: - tc.logger.error("failed to update the smb.conf file on " - "one or more servers") - return False - - # 6a. start the meta volume - ret = start_volume(meta_volname, mnode) - if ret: - tc.logger.info("successfully started the meta volume") - tc.run(mnode, "gluster v status ctdb") - else: - tc.logger.error("failed to start the meta volume") - return False - time.sleep(20) - # 6.b check if /gluster/lock mount exists on all servers - ret = check_if_gluster_lock_mount_exists(servers[:]) - if ret: - tc.logger.info("/gluster/lock mount exists on all servers") - else: - return False - - # 7. check if /etc/sysconfig/ctdb file exists - ret = check_if_ctdb_file_exists(servers[:]) - if ret: - tc.logger.info("/etc/sysconfig/ctdb file exists on all servers") - else: - return False - - # 8. create /etc/ctdb/nodes file - ret = create_ctdb_nodes_file(servers[:]) - if ret: - tc.logger.info("successfully created /etc/ctdb/nodes file on " - "all servers") - else: - tc.logger.error("failed to create /etc/ctdb/nodes file on " - "one or more servers") - return False - - # 9. create /etc/ctdb/public_addresses file - ret = create_ctdb_public_addresses(servers[:]) - if ret: - tc.logger.info("successfully created /etc/ctdb/public_addresses file " - "on all servers") - else: - tc.logger.error("failed to create /etc/ctdb/public_addresses file " - "on one or more servers") - return False - - # 10. start the ctdb service - ret = start_ctdb_service(servers[:]) - if ret: - tc.logger.info("successfully started ctdb service on all servers") - else: - return False - time.sleep(360) - - # 11. verify the ctdb status - ret = verify_ctdb_status(mnode) - if ret: - tc.logger.info("ctdb status is correct") - else: - tc.logger.error("ctdb status is incorrect") - return False - - return True - - -def stop_ctdb_service(servers=None): - '''Stops the CTDB service - Kwargs: - servers (list): The list of servers on which we need - to stop the CTDB service. - Defaults to ctdb_servers as specified in the config file. - Returns: - bool: True if successful, False otherwise - Example: - stop_ctdb_service() - ''' - if servers is None: - servers = (tc.global_config['gluster']['cluster_config'] - ['smb']['ctdb_servers']) - server_host_list = [] - for server in servers: - server_host_list.append(server['host']) - servers = server_host_list - if not isinstance(servers, list): - servers = [servers] - _rc = True - for server in servers: - ret, _, _ = tc.run(server, "service ctdb stop") - if ret != 0: - tc.logger.error("failed to stop the ctdb service on %s" % server) - _rc = False - - return _rc |
