Merge pull request #5090 from vector-im/dbkr/deploy_config_glob
Make --config accept globspull/5097/head
						commit
						26ec25b2f7
					
				|  | @ -14,6 +14,7 @@ import subprocess | |||
| import sys | ||||
| import tarfile | ||||
| import shutil | ||||
| import glob | ||||
| 
 | ||||
| try: | ||||
|     # python3 | ||||
|  | @ -66,7 +67,7 @@ class Deployer: | |||
|         self.bundles_path = None | ||||
|         self.should_clean = False | ||||
|         # filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json' | ||||
|         self.config_locations = {} | ||||
|         self.symlink_paths = {} | ||||
|         self.verify_signature = True | ||||
| 
 | ||||
|     def deploy(self, tarball, extract_path): | ||||
|  | @ -98,11 +99,11 @@ class Deployer: | |||
| 
 | ||||
|         print ("Extracted into: %s" % extracted_dir) | ||||
| 
 | ||||
|         if self.config_locations: | ||||
|             for config_filename, config_loc in self.config_locations.iteritems(): | ||||
|         if self.symlink_paths: | ||||
|             for link_path, file_path in self.symlink_paths.iteritems(): | ||||
|                 create_relative_symlink( | ||||
|                     target=config_loc, | ||||
|                     linkname=os.path.join(extracted_dir, config_filename) | ||||
|                     target=file_path, | ||||
|                     linkname=os.path.join(extracted_dir, link_path) | ||||
|                 ) | ||||
| 
 | ||||
|         if self.bundles_path: | ||||
|  | @ -165,9 +166,10 @@ if __name__ == "__main__": | |||
|         ) | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         "--config", nargs='?', default='./config.json', help=( | ||||
|             "Write a symlink at config.json in the extracted tarball to this \ | ||||
|             location. (Default: '%(default)s')" | ||||
|         "--include", nargs='*', default='./config*.json', help=( | ||||
|             "Symlink these files into the root of the deployed tarball. \ | ||||
|              Useful for config files and home pages. Supports glob syntax. \ | ||||
|              (Default: '%(default)s')" | ||||
|         ) | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|  | @ -182,8 +184,8 @@ if __name__ == "__main__": | |||
|     deployer.packages_path = args.packages_dir | ||||
|     deployer.bundles_path = args.bundles_dir | ||||
|     deployer.should_clean = args.clean | ||||
|     deployer.config_locations = { | ||||
|         "config.json": args.config, | ||||
|     } | ||||
| 
 | ||||
|     for include in args.include: | ||||
|         deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) | ||||
| 
 | ||||
|     deployer.deploy(args.tarball, args.extract_path) | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import json, requests, tarfile, argparse, os, errno | |||
| import time | ||||
| import traceback | ||||
| from urlparse import urljoin | ||||
| import glob | ||||
| 
 | ||||
| from flask import Flask, jsonify, request, abort | ||||
| 
 | ||||
|  | @ -188,15 +189,12 @@ if __name__ == "__main__": | |||
|         ) | ||||
|     ) | ||||
| 
 | ||||
|     def _raise(ex): | ||||
|         raise ex | ||||
| 
 | ||||
|     # --config config.json=../../config.json --config config.localhost.json=./localhost.json | ||||
|     # --include ../../config.json ./localhost.json homepages/* | ||||
|     parser.add_argument( | ||||
|         "--config", action="append", dest="configs", | ||||
|         type=lambda kv: kv.split("=", 1) if "=" in kv else _raise(Exception("Missing =")), help=( | ||||
|             "A list of configs to symlink into the extracted tarball. \ | ||||
|             For example, --config config.json=../config.json config2.json=../test/config.json" | ||||
|         "--include", nargs='*', default='./config*.json', help=( | ||||
|             "Symlink these files into the root of the deployed tarball. \ | ||||
|              Useful for config files and home pages. Supports glob syntax. \ | ||||
|              (Default: '%(default)s')" | ||||
|         ) | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|  | @ -220,7 +218,9 @@ if __name__ == "__main__": | |||
|     deployer = Deployer() | ||||
|     deployer.bundles_path = args.bundles_dir | ||||
|     deployer.should_clean = args.clean | ||||
|     deployer.config_locations = dict(args.configs) if args.configs else {} | ||||
| 
 | ||||
|     for include in args.include: | ||||
|         deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) | ||||
| 
 | ||||
| 
 | ||||
|     # we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to | ||||
|  | @ -234,13 +234,13 @@ if __name__ == "__main__": | |||
|         deploy_tarball(args.tarball_uri, build_dir) | ||||
|     else: | ||||
|         print( | ||||
|             "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Config locations: %s" % | ||||
|             "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include patterns: %s" % | ||||
|             (args.port, | ||||
|              arg_extract_path, | ||||
|              " (clean after)" if deployer.should_clean else "", | ||||
|              arg_symlink, | ||||
|              arg_jenkins_url, | ||||
|              deployer.config_locations, | ||||
|              deployer.symlink_paths, | ||||
|             ) | ||||
|         ) | ||||
|         app.run(host="0.0.0.0", port=args.port, debug=True) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Baker
						David Baker