ops_interface/deploy/deploy_git.py
pengtao b03f743b6d a
2021-06-15 17:49:12 +08:00

98 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
# python3 deploy_keys.py cloud_php
#
from ops.mmysql import MysqlBase
from ops.mansible import AnsibleAPI
from ops.mlog import define_logger
import logging
import datetime
import os
import pdb
import shutil
define_logger("/data/logs/ops/deploy_git.log")
log = logging.getLogger(__name__)
dbargs = dict()
dbargs['host'] = '10.10.3.5'
dbargs['user'] = 'ops'
dbargs['pswd'] = 'deploy2018'
dbargs['db'] = 'ywplatform'
class DeployGit:
def __init__(self, name):
self.name = name
self.now = datetime.datetime.now().strftime("%Y%m%dH%M%S")
def run(self):
sql = "select hosts,paths,user,url,pre_script,start_script from ops_deploy_git where name='{name}' and in_used=1;".format(
name=self.name)
mydb = MysqlBase(**dbargs)
data = mydb.query(sql)
self.infos = list()
if data:
for line in data:
if line:
hosts, paths, user, url, pre_script, start_script = line
self.infos.append(
(self.name, hosts, paths, user, url, pre_script, start_script))
else:
return False
self.infos = list(set(self.infos))
if self._build_tag():
self._deploy_remote()
else:
self.write("build {name} failed!".format(name=self.name))
def _build_tag(self):
url = self.infos[0][4]
pre_script = self.infos[0][5]
self.tag_name = "{name}{now}".format(name=self.name, now=self.now)
if os.path.isdir('/data/publish/git/'+self.name):
shutil.rmtree('/data/publish/git/'+self.name)
build_cmd = "cd /data/publish/git && git clone {url} && cd {name} && sh {pre_script} && cd .. && tar zcvf {tag_name}.tar.gz {name} ".format(
name=self.name, url=url, tag_name=self.tag_name, pre_script=pre_script)
os.system(build_cmd)
self.tag_file = "/data/publish/git/"+self.tag_name+'.tar.gz'
if os.path.isfile(self.tag_file):
return True
else:
return False
def _deploy_remote(self):
for line in self.infos:
if line:
pdb.set_trace()
_,hosts, paths, user, _, _, start_script = line
hosts = hosts.split(',')
hostfile = self.write_host(hosts)
an = AnsibleAPI(hostfile)
data = {'paths': paths, 'desc_path': self.tag_name, 'user': user,
'source': self.tag_file, 'name': self.name, 'start_script': start_script}
resule = an.run_playbook(
'/data/git/dev_ops/ansible/playbook/publish_git.yml', **data)
if not (resule['failed'] or resule['unreachable']):
log.info(f"deploy success! resule={resule}")
return True
else:
log.error(f"deploy failed info={resule}")
return False
def write_host(self, ip_addr):
host_file = "%s/host%s" % ('/tmp',
datetime.datetime.now().strftime("%Y%m%dH%M%S"))
with open(host_file, 'a+') as f:
for x in ip_addr:
f.writelines(x + '\n')
return host_file
def main():
d = DeployGit('dev_ops')
d.run()
if __name__ == '__main__':
main()