зеркало из https://github.com/microsoft/pai.git
68 строки
3.3 KiB
Python
68 строки
3.3 KiB
Python
import os
|
|
import sys
|
|
import logging
|
|
import logging.config
|
|
|
|
from deployment.utility.ssh import OpenPaiSSH
|
|
from deployment.utility.sftp_copy import OpenPaiSftpCopy
|
|
from clusterObjectModel.cluster_object_model import cluster_object_model
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class UtilityCmd():
|
|
def register(self, parser):
|
|
utility_parser = parser.add_subparsers(help="utility for maintaining in a easy way.")
|
|
|
|
ssh_parser = utility_parser.add_parser("ssh")
|
|
ssh_parser.add_argument("-p", "--config-path", dest="config_path", required=True, help="path of cluster configuration file")
|
|
ssh_parser.add_argument("-f", "--filter", dest="filter", nargs='+', help="Rule to filter machine. Format: key1=value1 key2=value2 ...")
|
|
ssh_parser.add_argument("-c", "--command", dest="command", required=True, help="The command to be executed remotely.")
|
|
ssh_parser.set_defaults(handler=self.cluster_ssh)
|
|
|
|
sftp_cp_parser = utility_parser.add_parser("sftp-copy")
|
|
sftp_cp_parser.add_argument("-f", "--filter", dest="filter", nargs='+', help="Rule to filter machine. Format: key1=value1 key2=value2 ...")
|
|
sftp_cp_parser.add_argument("-n", "--file-name", dest="file_name", required=True, help="File Name.")
|
|
sftp_cp_parser.add_argument("-s", "--source", dest="source", required=True, help="The source path of the file.")
|
|
sftp_cp_parser.add_argument("-d", "--destination", dest="dest", required=True, help="The target path of the file in the remote machines.")
|
|
sftp_cp_parser.add_argument("-p", "--config-path", dest="config_path", required=True, help="path of cluster configuration file")
|
|
sftp_cp_parser.set_defaults(handler=self.cluster_sftp_copy)
|
|
|
|
def get_machine_list(self, config_path):
|
|
objectModelFactoryHandler = cluster_object_model(configuration_path=config_path)
|
|
return objectModelFactoryHandler.kubernetes_config()["layout"]["machine-list"]
|
|
|
|
def rule_check(self, rule_list):
|
|
if rule_list == None:
|
|
return
|
|
for rule in rule_list:
|
|
kv = rule.split("=")
|
|
if len(kv) != 2:
|
|
logger.error("Please check the filter rule {0}. It's invalid.".format(rule))
|
|
sys.exit(1)
|
|
|
|
def cluster_ssh(self, args):
|
|
if args.config_path != None:
|
|
args.config_path = os.path.expanduser(args.config_path)
|
|
machine_list = self.get_machine_list(args.config_path)
|
|
else:
|
|
machine_list = {}
|
|
self.rule_check(args.filter)
|
|
ssh_handler = OpenPaiSSH(args.command, machine_list, args.filter)
|
|
ssh_handler.run()
|
|
|
|
def cluster_sftp_copy(self, args):
|
|
if args.config_path != None:
|
|
args.config_path = os.path.expanduser(args.config_path)
|
|
machine_list = self.get_machine_list(args.config_path)
|
|
else:
|
|
machine_list = {}
|
|
if args.source != None:
|
|
args.source = os.path.expanduser(args.source)
|
|
if args.dest != None and os.path.isabs(args.dest) is not True:
|
|
logger.error("The path of destination should an absolute path.")
|
|
sys.exit(1)
|
|
self.rule_check(args.filter)
|
|
sftp_copy_handler = OpenPaiSftpCopy(args.file_name, args.source, args.dest, machine_list, args.filter)
|
|
sftp_copy_handler.run()
|