1. 程式人生 > >Python腳本實現項目遠端部署

Python腳本實現項目遠端部署

install director esc ack module upd -m n) environ

本文為博主原創文章,未經博主允許不得轉載!

  • update-link.py

 1 #!/usr/bin/python
 2 import sys, os
 3 import argparse
 4 import subprocess
 5 from distutils.version import LooseVersion
 6 import re
 7 def main():
 8     kwargs = parse_argv(sys.argv[1:])
 9     module = kwargs.module[0]
10     version = None if
kwargs.version ==None else kwargs.version[0] 11 product_dir = /opt/repo/env/+module if kwargs.product_dir ==None 12 else os.path.join(kwargs.product_dir[0], module) 13 if not os.path.isdir(product_dir): 14 raise Exception(Not a valid product directory: + product_dir)
15 16 target = get_path(product_dir, version) 17 if not os.path.isdir(target): 18 raise Exception(Can not find target directory: +target) 19 20 link_name = /opt/+module 21 if os.path.isdir(os.path.dirname(link_name)) != True: 22 os.makedirs(os.path.dirname(link_name), 0755)
23 if os.path.exists(link_name): 24 if os.path.islink(link_name): 25 os.remove(link_name) 26 else: 27 raise Exception("Remove old link error, not a link: "+link_name) 28 29 cmd = [ln, -s, target, link_name] 30 returncode = subprocess.call(cmd) 31 if returncode != 0: 32 raise Exception(Cmd false: + .join(cmd)) 33 34 def get_path(product_dir, version): 35 if version == None: 36 if len(os.listdir(product_dir)) == 0: 37 raise Exception(Empty directory: + product_dir) 38 version = LooseVersion(0.0.0.0) 39 dir_names = [f for f in os.listdir(product_dir) if 40 re.match(^(\d+\.){3}\d+, f)] 41 for f in dir_names: 42 tmp = LooseVersion(f) 43 if version < tmp: 44 version = tmp 45 version = version.__str__() 46 return os.path.join(product_dir, version) 47 def parse_argv(argv): 48 parser = argparse.ArgumentParser( 49 description=‘‘‘update link for module.‘‘‘) 50 parser.add_argument(--module, nargs=1, required=True, 51 help=‘‘‘module to unpack.‘‘‘) 52 parser.add_argument(--product-dir, nargs=1, 53 help=‘‘‘directory that contain all versions of product.‘‘‘) 54 parser.add_argument(--version, nargs=1) 55 56 57 return parser.parse_args(argv) 58 if __name__ == __main__: 59 main()
  • main.yml

 1 - name: check app install status
 2   stat: path=/opt/tomcat_hive/bin
 3   register: hive_install_status
 4 - name: install app if needed
 5   shell: echo " backend have not been installed!"
 6   when: hive_install_status.stat.exists == False
 7 - name: stop exist process
 8   shell: /opt/tomcat_hive/bin/shutdown.sh --force
 9   environment:
10     JAVA_HOME: /usr/java/jdk1.8.0_141
11   when: hive_install_status.stat.exists
12   ignore_errors: True
13 - name: install hive backend by pip
14   pip: name=sdn-portal-backend state=present extra_args="-i http://pypi.XXX.com/ci/dev/+simple --trusted-host pypi.XXX.com --no-cache -t /opt/repo/env/dev/portal_backend"
15 - name: remove exist link
16   file: path=/opt/dev/portal_backend state=absent
17 - name: make sure dir exists
18   file: path=/opt/script/setup state=directory mode="u=rwx,g=rx,o=rx"
19 - name: make sure py script exists
20   copy: src=update-link.py dest=/opt/script/setup/update-link.py mode="u=rwx,g=rx,o=rx"
21 - name: update oss backend
22   shell: python /opt/script/setup/update-link.py --module dev/portal_backend
23 - name: startup oss backend
24   shell: nohup /opt/tomcat_hive/bin/catalina.sh start &
25   environment:
26     JAVA_HOME: /usr/java/jdk1.8.0_141

Python腳本實現項目遠端部署