summaryrefslogtreecommitdiffstats
path: root/testsuites/vstf/vstf_scripts/vstf/common/saltstack.py
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/vstf/vstf_scripts/vstf/common/saltstack.py')
-rw-r--r--testsuites/vstf/vstf_scripts/vstf/common/saltstack.py211
1 files changed, 0 insertions, 211 deletions
diff --git a/testsuites/vstf/vstf_scripts/vstf/common/saltstack.py b/testsuites/vstf/vstf_scripts/vstf/common/saltstack.py
deleted file mode 100644
index 96bdc911..00000000
--- a/testsuites/vstf/vstf_scripts/vstf/common/saltstack.py
+++ /dev/null
@@ -1,211 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-import os
-import sys
-import inspect
-import logging
-import salt.client as sclient
-
-from vstf.common import cmds
-
-log = logging.getLogger(__name__)
-
-
-class Mysalt(object):
- IS_DIR = 1
- IS_FILE = 2
- FAILED = -1
-
- def __init__(self):
- self.cur_path = os.path.abspath(os.path.dirname(inspect.stack()[1][1]))
- self.salt_conf = "/etc/salt/master"
- if not os.path.exists(self.salt_conf):
- raise Exception("this python must be run on the salt master.")
- self.pillar_path = str(
- cmds.execute("grep '^pillar_roots' \
- /etc/salt/master -A 2 | sed 1,2d | awk '{print $2}'") + '/')
- if self.pillar_path == "":
- log.warning(
- "pillar path not found, make sure the pillar_roots configed")
- else:
- os.system("mkdir -p " + self.pillar_path)
-
- self.state_path = str(cmds.execute("grep '^file_roots' \
- /etc/salt/master -A 2 | sed 1,2d | awk '{print $2}'") + '/')
- if self.state_path == "":
- log.warning(
- "state path not found, make sure the file_roots configed")
- else:
- os.system("mkdir -p " + self.state_path)
-
- self.salt = sclient.LocalClient()
-
- def slave_exists(self, host):
- pslave = "/etc/salt/pki/master/minions/" + host
- if os.path.exists(pslave):
- return True
- else:
- return False
-
- def __is_dir_or_file(self, src):
- if not os.path.exists(src):
- return self.FAILED
- if os.path.isdir(src):
- return self.IS_DIR
- elif os.path.isfile(src):
- return self.IS_FILE
- else:
- return self.FAILED
-
- def __copy_target(self, target, flag=""):
- if not os.path.exists(target):
- log.error("target %(d)s not exists.", {'d': target})
- return False
-
- if flag == "pillar":
- dst = self.pillar_path
- elif flag == "state":
- dst = self.state_path
- else:
- log.error(
- "this file or dir not pillar or state, can not support now.")
- return False
-
- if self.IS_FILE == self.__is_dir_or_file(target):
- os.system('cp ' + target + ' ' + dst)
- else:
- os.system("cp -r " + target + ' ' + dst)
- return True
-
- def copy(self, host, src, dst):
- """copy file or dir to slave.
- :src a file or a dir
- :dst if src is a file, the dst must be like this /home/xx.py, not /home
- """
-
- '''check if the host exists on the master'''
- if not self.slave_exists(host):
- log.error("the host %(h)s is not held by master, please check.")
- return False
-
- '''copy file to salt's file_roots'''
- if not self.__copy_target(src, "state"):
- return False
-
- if self.IS_DIR == self.__is_dir_or_file(src):
- dir_name = os.path.basename(src)
- self.salt.cmd(host, "cp.get_dir", ["salt://" + dir_name, dst])
- elif self.IS_FILE == self.__is_dir_or_file(src):
- file_name = os.path.basename(src)
- print self.salt.cmd(host, "cp.get_file", ["salt://" + file_name, dst])
- else:
- log.error("not file and not dir, what is it")
- return False
- return True
-
- def __luxuriant_line(self, str, color):
- if "red" == color:
- return "\033[22;35;40m" + str + "\033[0m"
- elif "green" == color:
- return "\033[22;32;40m" + str + "\033[0m"
- else:
- return str
-
- def result_check(self, ret, host):
- num_s = 0
- num_f = 0
- msg = ""
- try:
- for key in ret[host].keys():
- if True == ret[host][key]['result']:
- num_s += 1
- else:
- num_f += 1
- msg = msg + \
- self.__luxuriant_line("Failed %d:\n" % num_f, "red")
- msg = msg + "\t" + key + '\n'
- msg = msg + \
- self.__luxuriant_line("\t%s\n" % ret[host][key]['comment'], "red")
- if True == ('retcode' in ret[host][key]['changes']):
- msg = msg + \
- "RETCODE: %s\n" % (ret[host][key]['changes']['retcode'])
- if True == ('stderr' in ret[host][key]['changes']):
- msg = msg + \
- "STDERR: %s\n" % (ret[host][key]['changes']['stderr'])
- if True == ('stdout' in ret[host][key]['changes']):
- msg = msg + \
- "STDOUT: %s\n" % (ret[host][key]['changes']['stdout'])
- msg = msg + \
- self.__luxuriant_line("total success: %d\n" % num_s, "green")
- msg = msg + self.__luxuriant_line("failed: %d\n" % num_f, "red")
- except Exception as e:
- log.error(
- "sorry, thy to check result happend error, <%(e)s>.\nret:%(ret)s", {
- 'e': e, 'ret': ret})
- return -1
- log.info(':\n' + msg)
- return num_f
-
- def run_state(self, host, fstate, ext_pillar={}, care_result=True):
- try:
- log.info("salt " + host + " state.sls " +
- fstate + ' pillar=\'' + str(ext_pillar) + '\'')
- ret = self.salt.cmd(
- host, 'state.sls', [
- fstate, 'pillar=' + str(ext_pillar)], 180, 'list')
- except Exception as e:
- log.error("try to init host %(host)s happend error: <%(e)s>.",
- {'host': host, 'e': e})
- if True == care_result:
- raise e
-
- if 0 != self.result_check(ret, host) and care_result:
- sys.exit(-1)
- return True
-
- def salt_cmd(self, host, cmd):
- # import pdb
- # pdb.set_trace()
- logging.info("Begin to run cmd %s on %s" % (host, cmd))
-
- try:
- ret = self.salt.cmd(host, 'cmd.run', [cmd])
- except Exception:
- log.error("Remote salt execute failed.")
- return ret
-
- def copy_by_state(self, host, src, state_cmd, **kwargs):
- '''the src must be a dir, and the state.sls
- must be the name of the dir name'''
-
- if not self.slave_exists(host):
- log.error("the host %(h)s is not held by master, please check.")
- return False
-
- if not self.__copy_target(src, "state"):
- return False
-
- return self.run_state(host, state_cmd, kwargs, care_result=True)
-
- def get_master_ip(self, host=None):
- if not host:
- ret = cmds.execute(
- "grep '^interface:' /etc/salt/master | awk '{print $2}'").strip()
- return ret
- try:
- ret = self.salt.cmd(host, "grains.item", ["master"])[
- host]['master']
- except Exception:
- log.error("salt happened error when get master ip")
- return ""
- return ret
-
-
-mysalt = Mysalt()