93 lines
3.1 KiB
Python
93 lines
3.1 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
|
|
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)
|
|
pdb.set_trace()
|
|
build_cmd = "cd /data/publish/git && git clone {url} && cd {name} && sh {pre_script} && cd .. && tar 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+'tag.gz'
|
|
if os.path.isfile(self.tag_file):
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def _deploy_remote(self):
|
|
for line in self.infos:
|
|
if line:
|
|
hosts, paths, user, _, _, start_script = line
|
|
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()
|