# !/d/ymq/py3/bin/python import sh import os import sys import time import getpass import asyncio from appPublic.timeUtils import getCurrentTimeStamp, TimeStamp from appPublic.folderUtils import listFile, _mkdir from appPublic.sshx import SSHNode from appPublic.log import MyLogger import asyncssh home = os.getenv('HOME') kgadget_build = False class KbossAppDeploy: def __init__(self, node, mode): self.mode = mode self.user = 'kboss' + mode self.node = node async def update_code(self): current_date = int(time.time()) mode = self.mode try: await self.node._run('killall -9 kgadget') except: pass await self.node._run(f'mv ./kboss.{mode}.tar ./kboss.{mode}.tar.old') await self.node._l2r(f'{kboss_path}/kboss.{mode}.tar', '.') await self.node._run(f'tar xf ./kboss.{mode}.tar') await self.node._run('chmod +x bin/web') await self.node._run(f'cp ./kboss.{mode}.tar ./kboss.{mode}.{current_date}.tar') await self.node._run(f'mv ./kboss.{mode}.tar ./kboss.{mode}.tar.back') await self.node._run('bin/web') async def init_data(self): mode = self.mode await self.node._run(f'mysql -h db -ukboss -pkboss123 kboss_{mode} < ~/initdata/mysql.ddl.sql') await self.node._run(f'mysql -h db -ukboss -pkboss123 kboss_{mode} < ~/initdata/kboss_init.sql') async def deploy(self, initdata=False): await self.node.connect() await self.update_code() if initdata: await self.init_data() self.node.close() def default_node(mode): host = 'www.kaiyuancloud.cn' user = f'kboss{mode}' # if mode in ['test', 'dev']: # host = f'{mode}.kaiyuancloud.cn' if mode == 'dev': host = '47.93.12.75' port = 22 elif mode == 'ncmatch': host = '47.93.243.22' port = 22 else: port = 22 node = SSHNode(host, username=user, port=port, password=getpass.getpass(f'{user}@{host} password:'), ) return node if __name__ == '__main__': import sys MyLogger('deploy', levelname='info') mode = 'dev' if len(sys.argv) < 2: print(f'Usage:\n{sys.argv[0]} dev|test|prod|ncmatch [y]') sys.exit(1) if len(sys.argv) > 1: mode = sys.argv[1] kboss_path = f'{home}/kboss_{mode}' initdata = False if len(sys.argv) > 2: if sys.argv[2] == "y": initdata = True if mode not in ['dev', 'test:bug', 'prod', 'ncmatch']: print(f'{mode} not defined') sys.exit(1) node = default_node(mode) d = KbossAppDeploy(node, mode) loop = asyncio.get_event_loop() loop.run_until_complete(d.deploy(initdata))