首页 > 代码库 > Python脚本实现项目远端部署

Python脚本实现项目远端部署

  本文为博主原创文章,未经博主允许不得转载!

 

  • 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/+module21     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 = tmp45         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_14111   when: hive_install_status.stat.exists12   ignore_errors: True13 - name: install hive backend by pip14   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 link16   file: path=/opt/dev/portal_backend state=absent17 - name: make sure dir exists18   file: path=/opt/script/setup state=directory mode="u=rwx,g=rx,o=rx"19 - name: make sure py script exists20   copy: src=http://www.mamicode.com/update-link.py dest=/opt/script/setup/update-link.py mode="u=rwx,g=rx,o=rx"21 - name: update oss backend22   shell: python /opt/script/setup/update-link.py --module dev/portal_backend23 - name: startup oss backend24   shell: nohup /opt/tomcat_hive/bin/catalina.sh start &25   environment:26     JAVA_HOME: /usr/java/jdk1.8.0_141

 

Python脚本实现项目远端部署