def check_GPG_keys(self, *args, **kwargs): """ Check GPG Keys [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: Output of check GPG keys command """ self._load_kwargs(kwargs) banner("CLI.Check GPG Keys") try: OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): cmd = "sudo apt-key list" if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): cmd = '''sudo rpm -qa gpg-pubkey --qf "%{version}-%{release} %{summary}\n"''' cmd_op = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd) serialised_output = self._serialize_response(time.time(), cmd_op) output = str(serialised_output['Result']['stdout']).replace( '\n', '').strip() return output except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def validate_platina_systems_package_repository(self, *args, **kwargs): """ Validate Platina Systems Package repository [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: "OK" if validation successful """ self._load_kwargs(kwargs) banner("CLI.Validate Platina Systems Package repository") try: validation_checks = [] check_repo_list_output = self.check_repo_list( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) check_GPG_keys_output = self.check_GPG_keys( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): print( " =============== Searching in repo list: deb https://platina.io/goes/debian stretch main =========== " ) if re.search( r"deb https://platina.io/goes/debian stretch main", str(check_repo_list_output)): validation_checks.append("OK") print( "================ Searching in gpg keys: Kevin Paul Herbert <*****@*****.**> ============= " ) if re.search(r"Kevin Paul Herbert <*****@*****.**>", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 2): return "OK" else: return "Platina Systems Package repository validation unsuccessful: {}".format( validation_checks) if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): return "Validations for Platina Systems Package respository is not available for CentOS or RedHat Enterprise" except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def check_repo_list(self, *args, **kwargs): """ Check repo list [Args] (str) host_ip: Host IP of the node [Returns] (str) Response: Output of check repo list command """ self._load_kwargs(kwargs) banner("CLI.Check repo list") try: OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) print("OS_type output: {}".format(OS_type)) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): print("Inside debian") cmd = "sudo grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*" if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): print("Inside red hat") cmd = "sudo yum repolist" print("cmd to be executed is : {}".format(cmd)) cmd_op = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd) serialised_output = self._serialize_response(time.time(), cmd_op) output = str(serialised_output['Result']['stdout']).replace( '\n', '').strip() return output except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def install_s3cmd(self, *args, **kwargs): self._load_kwargs(kwargs) conn = BuiltIn().get_variable_value("${PCC_CONN}") print("Kwargs are: {}".format(kwargs)) try: host_ips = [] status = [] get_nodes_response = Nodes().get_nodes(**kwargs) host_ips = [ str(node['Host']) for node in get_response_data(get_nodes_response) ] print("host_ips_list : {}".format(host_ips)) for ip in host_ips: OS_type = Cli().get_OS_version(host_ip=ip, linux_user=self.username, linux_password=self.password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): cmd = "sudo apt-get --assume-yes install s3cmd" if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): cmd = "sudo yum -y install s3cmd" s3cmd_install = cli_run(cmd=cmd, host_ip=ip, linux_user=self.username, linux_password=self.password) print("Cmd: {} executed successfully. Output is : {}".format( cmd, str(s3cmd_install))) trace("Cmd: {} executed successfully. Output is : {}".format( cmd, str(s3cmd_install))) return "OK" except Exception as e: print("s3cmd installation unsuccessful: {}".format(e)) return ("s3cmd installation unsuccessful: {}".format(e))
def validate_node_self_healing(self, *args, **kwargs): """ Validate Node Self Healing [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: Output of Validate Node Self Healing """ self._load_kwargs(kwargs) banner("CLI.Validate Node Self Healing") try: OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) cmd = "sudo sysctl -a" cmd_op = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd) serialised_output = self._serialize_response(time.time(), cmd_op) output = str(serialised_output['Result']['stdout']).replace( '\n', '').strip() list_for_Ubuntu = [ 'kernel.hung_task_panic = 1', 'kernel.panic = 1', 'kernel.panic_on_io_nmi = 1', 'kernel.panic_on_oops = 1', 'kernel.panic_on_rcu_stall = 1', 'kernel.panic_on_unrecovered_nmi = 1', 'kernel.panic_on_warn = 1', 'kernel.softlockup_panic = 1', 'kernel.unknown_nmi_panic = 1', 'vm.panic_on_oom = 1' ] list_for_Debian = [ 'kernel.panic = 1', 'kernel.panic_on_io_nmi = 1', 'kernel.panic_on_oops = 1', 'kernel.panic_on_rcu_stall = 1', 'kernel.panic_on_unrecovered_nmi = 1', 'kernel.panic_on_warn = 1', 'kernel.unknown_nmi_panic = 1', 'vm.panic_on_oom = 1' ] list_for_Centos_Redhat = [ 'kernel.hardlockup_panic = 1', 'kernel.hung_task_panic = 1', 'kernel.panic = 1', 'kernel.panic_on_io_nmi = 1', 'kernel.panic_on_oops = 1', 'kernel.panic_on_unrecovered_nmi = 1', 'kernel.panic_on_warn = 1', 'kernel.softlockup_panic = 1', 'kernel.unknown_nmi_panic = 1', 'vm.panic_on_oom = 1' ] if re.search("Debian", str(OS_type)): for i in list_for_Debian: if re.search(i, output): continue else: return "Package {} not found in the command output".format( i) return "OK" if re.search("Ubuntu", str(OS_type)): for i in list_for_Ubuntu: if re.search(i, output): continue else: return "Package {} not found in the command output".format( i) return "OK" if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): for i in list_for_Centos_Redhat: if re.search(i, output): continue else: return "Package {} not found in the command output".format( i) return "OK" except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def validate_automatic_upgrades(self, *args, **kwargs): """ Automatic Upgrades Validation [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: "OK" if validation successful """ self._load_kwargs(kwargs) banner("CLI.Automatic Upgrades Validation") try: OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): package_installation_check = Cli().check_package_installed( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password, package_name="unattended-upgrades") print("package_installation_check: {}".format( package_installation_check)) cmd1 = "sudo cat /etc/apt/apt.conf.d/20auto-upgrades" cmd_op1 = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd1) serialised_output1 = self._serialize_response( time.time(), cmd_op1) print("serialised_output1 is : {}".format(serialised_output1)) cmd2 = 'sudo cat /var/log/unattended-upgrades/unattended-upgrades.log' cmd_op2 = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd2) serialised_output2 = self._serialize_response( time.time(), cmd_op2) print("serialised_output2 is : {}".format(serialised_output2)) if (re.search(r'APT::Periodic::Update-Package-Lists "0"', str(serialised_output1)) ) and (package_installation_check == "unattended-upgrades Package installed") and ( (re.search(r'installed', str(serialised_output2))) or (re.search( r'No packages found that can be upgraded', str(serialised_output2)))): return "Automatic upgrades set to No from backend" elif (re.search( r'APT::Periodic::Update-Package-Lists "1"', str(serialised_output1))) and (re.search( r'APT::Periodic::Unattended-Upgrade "1"', str(serialised_output1))) and ( package_installation_check == "unattended-upgrades Package installed" ) and ( (re.search(r'installed', str(serialised_output2))) or (re.search( r'No packages found that can be upgraded', str(serialised_output2)))): return "Automatic upgrades set to Yes from backend" else: return "Automatic upgrades validation unsuccessful in Debian" if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): package_installation_check = Cli().check_package_installed( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password, package_name="unattended-upgrades") cmd1 = "sudo service yum-cron status" cmd_op1 = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd1) serialised_output1 = self._serialize_response( time.time(), cmd_op1) print("serialised_output1 is : {}".format(serialised_output1)) current_date = datetime.date.today().strftime("%b %d") print("current date is : {}".format(current_date)) cmd2 = 'sudo cat /var/log/yum.log| grep "{}"'.format( current_date) cmd_op2 = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd2) serialised_output2 = self._serialize_response( time.time(), cmd_op2) print("serialised_output2 is : {}".format(serialised_output2)) cmd3 = 'sudo cat /var/log/cron | grep "{}"|grep -i yum-daily'.format( current_date) cmd_op3 = cli_run(self.host_ip, self.linux_user, self.linux_password, cmd3) serialised_output3 = self._serialize_response( time.time(), cmd_op3) if (re.search(r'yum-cron.service; enabled', str(serialised_output1)) ) and (package_installation_check == "unattended-upgrades Package installed") and ( re.search( r'updated', str(serialised_output2))) and (re.search( r'starting 0yum-daily.cron', str(serialised_output3))): return "Automatic upgrades set to Yes from backend" elif (re.search(r'yum-cron.service; disabled', str(serialised_output1)) ) and (package_installation_check == "unattended-upgrades Package installed") and ( re.search( r'installed', str(serialised_output2))) and (re.search( r'starting 0yum-daily.cron', str(serialised_output3))): return "Automatic upgrades set to No from backend" elif (re.search(r'yum-cron.service could not be found', str(serialised_output1)) ) and (package_installation_check == "unattended-upgrades Package installed") and ( re.search( r'installed', str(serialised_output2))) and (re.search( r'starting 0yum-daily.cron', str(serialised_output3))): return "Automatic upgrades service are not available on backend" else: return "Automatic upgrades validation unsuccessful in RedHat or CentOS" except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def validate_os_package_repository(self, *args, **kwargs): """ OS Package repository validation [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: "OK" if validation successful """ self._load_kwargs(kwargs) banner("CLI.Validate OS Package repository") try: validation_checks = [] check_repo_list_output = self.check_repo_list( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) check_GPG_keys_output = self.check_GPG_keys( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)): print( " =============== Searching in repo list:deb http://deb.debian.org/debian stretch main =========== " ) if re.search(r"deb http://deb.debian.org/debian stretch main", str(check_repo_list_output)): validation_checks.append("OK") if re.search( r"deb-src http://deb.debian.org/debian-security/ stretch/updates", str(check_repo_list_output)): validation_checks.append("OK") if re.search( r"deb http://deb.debian.org/debian stretch-updates main", str(check_repo_list_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 3): return "OK" else: return "OS Package repository validation unsuccessful in Debian: {}".format( validation_checks) if re.search("Ubuntu", str(OS_type)): print( " =============== Searching in repo list:deb http://us.archive.ubuntu.com/ubuntu bionic main restricted universe multiverse =========== " ) if re.search( r"deb http://us.archive.ubuntu.com/ubuntu bionic main restricted universe multiverse", str(check_repo_list_output)): validation_checks.append("OK") if re.search( r"deb http://us.archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse", str(check_repo_list_output)): validation_checks.append("OK") if re.search( r"deb http://us.archive.ubuntu.com/ubuntu bionic-backports main restricted universe multiverse", str(check_repo_list_output)): validation_checks.append("OK") if re.search( r"deb http://us.archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse", str(check_repo_list_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 4): return "OK" else: return "OS Package repository validation unsuccessful in Ubuntu: {}".format( validation_checks) if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): print( "=========== Searching in repo list: base/7/x86_64 ================" ) if re.search( r"base/7/x86_64", str(check_repo_list_output)) and re.search( r"extras/7/x86_64", str(check_repo_list_output)) and re.search( r"updates/7/x86_64", str(check_repo_list_output)) and re.search( r"epel/x86_64", str(check_repo_list_output)): validation_checks.append("OK") print( "============ Searching in gpg keys: gpg\(Fedora EPEL (7) <*****@*****.**>\) ==================" ) if re.search( r"gpg\(Fedora EPEL (7) <*****@*****.**>\)", str(check_GPG_keys_output)) and re.search( r"Official Signing Key\) <*****@*****.**>\)", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 1): return "OK" else: return "OS Package repository validation unsuccessful in Redhat or CentOS: {}".format( validation_checks) except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def validate_network_resource(self, *args, **kwargs): """ Validate Network Resource [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: "OK" if validation successful """ self._load_kwargs(kwargs) banner("CLI.Validate Network Resource") try: validation_checks = [] check_repo_list_output = self.check_repo_list( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) check_GPG_keys_output = self.check_GPG_keys( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): print( " =============== Searching in repo list: deb https://deb.frrouting.org/frr stretch frr-stable =========== " ) if (re.search( r"deb https://deb.frrouting.org/frr stretch frr-stable", str(check_repo_list_output)) ) or (re.search( r"deb https://deb.frrouting.org/frr bionic frr-stable", str(check_repo_list_output))): validation_checks.append("OK") print( "================ Searching in gpg keys: FRRouting Debian Repository ============= " ) if re.search(r"FRRouting Debian Repository", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 2): return "OK" else: return "Network Resource validation unsuccessful: {}".format( validation_checks) if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): print( "=========== Searching in repo list: FRRouting Packages for Enterprise Linux 7 - x86_64 ================" ) if re.search( r"FRRouting Packages for Enterprise Linux 7", str(check_repo_list_output)) and re.search( "FRRouting Dependencies for Enterprise Linux 7", str(check_repo_list_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 1): return "OK" else: return "Network Resource validation unsuccessful: {}".format( validation_checks) except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def validate_ceph_resource(self, *args, **kwargs): """ Validate CEPH Resource [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: "OK" if validation successful """ self._load_kwargs(kwargs) banner("CLI.Validate CEPH Resource") try: validation_checks = [] check_repo_list_output = self.check_repo_list( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) check_GPG_keys_output = self.check_GPG_keys( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): print( " =============== Searching in repo list: deb http://download.ceph.com/debian-nautilus xenial main =========== " ) if (re.search( r"deb http://download.ceph.com/debian-nautilus xenial main", str(check_repo_list_output)) ) or (re.search( r"deb http://download.ceph.com/debian-nautilus bionic main", str(check_repo_list_output))): validation_checks.append("OK") print( "================ Searching in gpg keys: Ceph.com (release key) <*****@*****.**> ============= " ) if re.search(r"Ceph.com \(release key\) <*****@*****.**>", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 2): return "OK" else: return "Kubernetes Resource validation unsuccessful: {}".format( validation_checks) if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): print( "=========== Searching in repo list: ceph_stable/x86_64 ================" ) #if re.search(r"RedHat Ceph stable community repository", str(check_repo_list_output)) and re.search("RedHat Ceph stable noarch community repository", str(check_repo_list_output)): if re.search(r"ceph_stable/x86_64", str(check_repo_list_output)) and re.search( "ceph_stable_noarch", str(check_repo_list_output)): validation_checks.append("OK") print( "============ Searching in gpg keys: gpg(Ceph.com (release key) ==================" ) if re.search(r"gpg\(Ceph.com \(release key\)", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 2): return "OK" else: return "CEPH Resource validation unsuccessful: {}".format( validation_checks) except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)
def validate_kubernetes_resource(self, *args, **kwargs): """ Validate Kubernetes Resource [Args] (str) host_ip: Host IP of the node [Returns] (dict) Response: "OK" if validation successful """ self._load_kwargs(kwargs) banner("CLI.Validate Kubernetes Resource") try: validation_checks = [] check_repo_list_output = self.check_repo_list( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) check_GPG_keys_output = self.check_GPG_keys( host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) OS_type = Cli().get_OS_version(host_ip=self.host_ip, linux_user=self.linux_user, linux_password=self.linux_password) if re.search("Debian", str(OS_type)) or re.search( "Ubuntu", str(OS_type)): print( " =============== Searching in repo list: deb https://download.docker.com/linux/debian stretch stable =========== " ) if (re.search( r"deb https://download.docker.com/linux/debian stretch stable", str(check_repo_list_output)) ) or (re.search( r"deb https://download.docker.com/linux/ubuntu bionic stable", str(check_repo_list_output))): validation_checks.append("OK") print( "================ Searching in gpg keys: Docker Release (CE deb) ============= " ) if re.search(r"Docker Release \(CE deb\)", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 2): return "OK" else: return "Kubernetes Resource validation unsuccessful: {}".format( validation_checks) if re.search("Red Hat Enterprise", str(OS_type)) or re.search( "CentOS", str(OS_type)): print( "=========== Searching in repo list: docker-ce/x86_64, Docker-CE Repository ================" ) if re.search(r"docker-ce/x86_64", str(check_repo_list_output)) and re.search( "Docker-CE Repository", str(check_repo_list_output)): validation_checks.append("OK") print( "============ Searching in gpg keys: gpg(Docker Release (CE rpm) ==================" ) if re.search(r"Docker Release \(CE rpm\)", str(check_GPG_keys_output)): validation_checks.append("OK") if all(x == validation_checks[0] for x in validation_checks) and (len(validation_checks) == 2): return "OK" else: return "Kubernetes Resource validation unsuccessful: {}".format( validation_checks) except Exception as e: print("Exception encountered: {}".format(e)) return "Exception encountered: " + str(e)