summaryrefslogtreecommitdiffstats
path: root/cns-libs/cnslibs/common/cns_libs.py
diff options
context:
space:
mode:
Diffstat (limited to 'cns-libs/cnslibs/common/cns_libs.py')
-rw-r--r--cns-libs/cnslibs/common/cns_libs.py415
1 files changed, 4 insertions, 411 deletions
diff --git a/cns-libs/cnslibs/common/cns_libs.py b/cns-libs/cnslibs/common/cns_libs.py
index 370e05e3..68951784 100644
--- a/cns-libs/cnslibs/common/cns_libs.py
+++ b/cns-libs/cnslibs/common/cns_libs.py
@@ -1,397 +1,15 @@
+from glusto.core import Glusto as g
+import yaml
+
from cnslibs.common.exceptions import (
ExecutionError,
NotSupportedException)
-from cnslibs.common.openshift_ops import (
- get_ocp_gluster_pod_names,
- oc_rsh,
- oc_version)
-from cnslibs.common.waiter import Waiter
-from glusto.core import Glusto as g
-import yaml
+from cnslibs.common.openshift_ops import oc_version
MASTER_CONFIG_FILEPATH = "/etc/origin/master/master-config.yaml"
-def edit_master_config_file(hostname, routingconfig_subdomain):
- '''
- This function edits the /etc/origin/master/master-config.yaml file
- Args:
- hostname (str): hostname on which want to edit
- the master-config.yaml file
- routingconfig_subdomain (str): routing config subdomain url
- ex: cloudapps.mystorage.com
- Returns:
- bool: True if successful,
- otherwise False
- '''
- try:
- conn = g.rpyc_get_connection(hostname, user="root")
- if conn is None:
- g.log.error("Failed to get rpyc connection of node %s"
- % hostname)
- return False
- with conn.builtin.open(MASTER_CONFIG_FILEPATH, 'r') as f:
- data = yaml.load(f)
- add_allow = 'AllowAllPasswordIdentityProvider'
- data['oauthConfig']['identityProviders'][0]['provider'][
- 'kind'] = add_allow
- data['routingConfig']['subdomain'] = routingconfig_subdomain
- with conn.builtin.open(MASTER_CONFIG_FILEPATH, 'w+') as f:
- yaml.dump(data, f, default_flow_style=False)
- except Exception as err:
- raise ExecutionError("failed to edit master-config.yaml file "
- "%s on %s" % (err, hostname))
- finally:
- g.rpyc_close_connection(hostname, user="root")
-
- g.log.info("successfully edited master-config.yaml file %s" % hostname)
- return True
-
-
-def setup_router(hostname, router_name, timeout=1200, wait_step=60):
- '''
- This function sets up router
- Args:
- hostname (str): hostname on which we need to
- setup router
- router_name (str): router name
- timeout (int): timeout value,
- default value is 1200 sec
- wait_step( int): wait step,
- default value is 60 sec
- Returns:
- bool: True if successful,
- otherwise False
- '''
- cmd = ("oc get pods | grep '%s'| grep -v deploy | "
- "awk '{print $3}'" % router_name)
- ret, out, err = g.run(hostname, cmd, "root")
- if ret != 0:
- g.log.error("failed to execute cmd %s" % cmd)
- return False
- output = out.strip().split("\n")[0]
- if "No resources found" in output or output == "":
- g.log.info("%s not present creating it" % router_name)
- cmd = "oadm policy add-scc-to-user privileged -z router"
- ret, out, err = g.run(hostname, cmd, "root")
- if ret != 0:
- g.log.error("failed to execute cmd %s" % cmd)
- return False
- cmd = "oadm policy add-scc-to-user privileged -z default"
- ret, out, err = g.run(hostname, cmd, "root")
- if ret != 0:
- g.log.error("failed to execute cmd %s" % cmd)
- return False
- cmd = "oadm router %s --replicas=1" % router_name
- ret, out, err = g.run(hostname, cmd, "root")
- if ret != 0:
- g.log.error("failed to execute cmd %s" % cmd)
- return False
- router_flag = False
- for w in Waiter(timeout, wait_step):
- cmd = "oc get pods | grep '%s'| awk '{print $3}'" % router_name
- ret, out, err = g.run(hostname, cmd, "root")
- if ret != 0:
- g.log.error("failed to execute cmd %s" % cmd)
- break
- status = out.strip().split("\n")[0].strip()
- if status == "ContainerCreating" or status == "Pending":
- g.log.info("container creating for router %s sleeping for"
- " %s seconds" % (router_name, wait_step))
- continue
- elif status == "Running":
- router_flag = True
- g.log.info("router %s is up and running" % router_name)
- return router_flag
- elif status == "Error":
- g.log.error("error while setting up router %s" % (
- router_name))
- return router_flag
- else:
- g.log.error("%s router pod has different status - "
- "%s" % (router_name, status))
- return router_flag
- if w.expired:
- g.log.error("failed to setup '%s' router in "
- "%s seconds" % (router_name, timeout))
- return False
- else:
- g.log.info("%s already present" % router_name)
- return True
-
-
-def update_router_ip_dnsmasq_conf(hostname, router_name, router_domain):
- '''
- This function updates the router-ip in /etc/dnsmasq.conf file
- Args:
- hostname (str): hostname on which we need to
- edit dnsmaq.conf file
- router_name (str): router name to find its ip
- Returns:
- bool: True if successful,
- otherwise False
- '''
- cmd = ("oc get pods -o wide | grep '%s'| grep -v deploy | "
- "awk '{print $6}' | cut -d ':' -f 1") % router_name
- ret, out, err = g.run(hostname, cmd, "root")
- if ret != 0:
- g.log.error("failed to execute cmd %s" % cmd)
- return False
- router_ip = out.strip().split("\n")[0].strip()
- data_to_write = "address=/.%s/%s" % (router_domain, router_ip)
- try:
- conn = g.rpyc_get_connection(hostname, user="root")
- if conn is None:
- g.log.error("Failed to get rpyc connection of node %s"
- % hostname)
- return False
-
- update_flag = False
- for line in conn.modules.fileinput.input(
- '/etc/dnsmasq.conf', inplace=True):
- if router_domain in line:
- conn.modules.sys.stdout.write(line.replace(line,
- data_to_write))
- update_flag = True
- else:
- conn.modules.sys.stdout.write(line)
- if not update_flag:
- with conn.builtin.open('/etc/dnsmasq.conf', 'a+') as f:
- f.write(data_to_write + '\n')
- except Exception as err:
- g.log.error("failed to update router-ip in dnsmasq.conf %s" % err)
- return False
- finally:
- g.rpyc_close_connection(hostname, user="root")
- g.log.info("sucessfully updated router-ip in dnsmasq.conf")
- return True
-
-
-def update_nameserver_resolv_conf(hostname, position="first_line"):
- '''
- This function updates namserver 127.0.0.1
- at first line in /etc/resolv.conf
- Args:
- hostname (str): hostname on which we need to
- edit resolv.conf
- position (str): where to add nameserver
- ex: EOF, it defaults to first line
- Returns:
- bool: True if successful,
- otherwise False
- '''
- try:
- conn = g.rpyc_get_connection(hostname, user="root")
- if conn is None:
- g.log.error("Failed to get rpyc connection of node %s"
- % hostname)
- return False
-
- if position == "EOF":
- update_flag = False
- with conn.builtin.open("/etc/resolv.conf", "r+") as f:
- for line in f:
- if "nameserver" in line and "127.0.0.1" in line:
- update_flag = True
- break
- if not update_flag:
- f.write("nameserver 127.0.0.1\n")
- else:
- for linenum, line in enumerate(conn.modules.fileinput.input(
- '/etc/resolv.conf', inplace=True)):
- if linenum == 0 and "127.0.0.1" not in line:
- conn.modules.sys.stdout.write("nameserver 127.0.0.1\n")
- conn.modules.sys.stdout.write(line)
- except Exception as err:
- g.log.error("failed to update nameserver in resolv.conf %s" % err)
- return False
- finally:
- g.rpyc_close_connection(hostname, user="root")
- g.log.info("sucessfully updated namserver in resolv.conf")
- return True
-
-
-def edit_multipath_conf_file(hostname):
- '''
- This function edits the /etc/multipath.conf
- Args:
- hostname (str): hostname on which we want to edit
- the /etc/multipath.conf file
- Returns:
- bool: True if successful,
- otherwise False
- '''
- try:
- conn = g.rpyc_get_connection(hostname, user="root")
- if conn is None:
- g.log.error("Failed to get rpyc connection of node %s"
- % hostname)
- return False
-
- edit_flag = False
- file1 = conn.builtin.open("/etc/multipath.conf", "r+")
- for line1 in file1.readlines():
- if "LIO iSCSI" in line1:
- g.log.info("/etc/multipath.conf file already "
- "edited on %s" % hostname)
- edit_flag = True
- if not edit_flag:
- file1 = conn.builtin.open("/etc/multipath.conf", "a+")
- with open("cnslibs/common/sample-multipath.txt") as file2:
- for line2 in file2:
- file1.write(line2)
- except Exception as err:
- g.log.error("failed to edit /etc/multipath.conf file %s on %s" %
- (err, hostname))
- return False
- finally:
- g.rpyc_close_connection(hostname, user="root")
- g.log.info("successfully edited /etc/multipath.conf file %s" % hostname)
- return True
-
-
-def edit_iptables_cns(hostname):
- '''
- This function edits the iptables file to open the ports
- Args:
- hostname (str): hostname on which we need to edit
- the iptables
- Returns:
- bool: True if successful,
- otherwise False
- '''
- try:
- conn = g.rpyc_get_connection(hostname, user="root")
- if conn is None:
- g.log.error("Failed to get rpyc connection of node %s" % hostname)
- return False
-
- filter_flag = False
- file_data = ""
- data_to_add = "\n".join([
- "-A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m %s" % line
- for line in ("tcp --dport 24007 -j ACCEPT",
- "tcp --dport 24008 -j ACCEPT",
- "tcp --dport 2222 -j ACCEPT",
- "multiport --dports 49152:49664 -j ACCEPT",
- "tcp --dport 24010 -j ACCEPT",
- "tcp --dport 3260 -j ACCEPT",
- "tcp --dport 111 -j ACCEPT")
- ]) + "\n"
- with conn.builtin.open("/etc/sysconfig/iptables", "r+") as f:
- for line in f.readlines():
- if "--dport 3260" in line:
- g.log.info("Iptables is already edited on %s" % hostname)
- return True
- if "*filter" in line:
- filter_flag = True
- elif "COMMIT" in line and filter_flag is True:
- file_data += data_to_add
- filter_flag = False
- file_data += "%s" % line
- with conn.builtin.open("/etc/sysconfig/iptables", "w") as f:
- f.write(file_data)
- g.log.info("successfully edited iptables on %s" % hostname)
- return True
- except Exception as err:
- g.log.error("failed to edit iptables on %s err %s" % (hostname, err))
- return False
- finally:
- g.rpyc_close_connection(hostname, user="root")
-
-
-def enable_kernel_module(hostname, module_name):
- '''
- This function enables kernel modules required for CNS
- Args:
- hostname (str): hostname on which we want to
- enable kernel modules
- module_name (str): name of the module
- ex: dm_thin_pool
- Returns:
- bool: True if successfull or already running,
- False otherwise
- '''
- cmd = "lsmod | grep %s" % module_name
- ret, out, err = g.run(hostname, cmd, "root")
- if ret == 0:
- g.log.info("%s module is already enabled on %s"
- % (module_name, hostname))
- else:
- cmd = "modprobe %s" % module_name
- ret, out, err = g.run(hostname, cmd, "root")
- if ret == 0:
- g.log.info("%s module enabled on %s"
- % (module_name, hostname))
- else:
- g.log.error("failed to enable %s module on %s"
- % (module_name, hostname))
- return False
- cmd = "echo %s > /etc/modules-load.d/%s.conf" % (
- module_name, module_name)
- ret, out, err = g.run(hostname, cmd, "root")
- if ret == 0:
- g.log.info("created %s.conf" % module_name)
- else:
- g.log.error("failed to %s.conf" % module_name)
-
- return True
-
-
-def start_service(hostname, service):
- '''
- This function starts service by its name
- Args:
- hostname (str): hostname on which we want
- to start service
- Returns:
- bool: True if successfull or already running,
- False otherwise
- '''
- cmd = "systemctl status %s" % service
- ret, out, err = g.run(hostname, cmd, "root")
- if ret == 0:
- g.log.info("%s service is already running on %s"
- % (service, hostname))
- return True
- cmd = "systemctl start %s" % service
- ret, out, err = g.run(hostname, cmd, "root")
- if ret == 0:
- g.log.info("successfully started %s service on %s"
- % (service, hostname))
- return True
- g.log.error("failed to start %s service on %s"
- % (service, hostname))
- return False
-
-
-def start_rpcbind_service(hostname):
- '''
- This function starts the rpcbind service
- Args:
- hostname (str): hostname on which we want to start
- rpcbind service
- Returns:
- bool: True if successfull or already running,
- False otherwise
- '''
- return start_service(hostname, 'rpcbind')
-
-
-def start_gluster_blockd_service(hostname):
- '''
- This function starts the gluster-blockd service
- Args:
- hostname (str): hostname on which we want to start
- gluster-blocks service
- Returns:
- bool: True if successfull or already running,
- False otherwise
- '''
- return start_service(hostname, 'gluster-blockd')
-
-
def validate_multipath_pod(hostname, podname, hacount):
'''
This function validates multipath for given app-pod
@@ -443,31 +61,6 @@ def validate_multipath_pod(hostname, podname, hacount):
return True
-def validate_gluster_blockd_service_gluster_pod(hostname):
- '''
- This function validates if gluster-blockd service is
- running on all gluster-pods
- Args:
- hostname (str): OCP master node name
- Returns:
- bool: True if service is running on all gluster-pods,
- otherwise False
- '''
- gluster_pod_list = get_ocp_gluster_pod_names(hostname)
- g.log.info("gluster_pod_list -> %s" % gluster_pod_list)
- for pod in gluster_pod_list:
- cmd = "systemctl status gluster-blockd"
- ret, out, err = oc_rsh(hostname, pod, cmd)
- if ret != 0:
- g.log.error("failed to execute cmd %s on %s out: "
- "%s err: %s" % (
- cmd, hostname, out, err))
- return False
- g.log.info("gluster-blockd service is running on all "
- "gluster-pods %s" % gluster_pod_list)
- return True
-
-
def enable_pvc_resize(master_node):
'''
This function edits the /etc/origin/master/master-config.yaml