Переглянути джерело

Add a helper tool to updte chart dependencies

Waqar Ahmed 4 роки тому
батько
коміт
23ed62487c
1 змінених файлів з 77 додано та 0 видалено
  1. 77 0
      update_dependencies

+ 77 - 0
update_dependencies

@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+import argparse
+import errno
+import os
+import subprocess
+
+
+class ValidationException(Exception):
+    def __init__(self, error_msg, error_no=errno.EFAULT):
+        self.errmsg = error_msg
+        self.errno = error_no
+
+    def get_error_name(self):
+        return errno.errorcode.get(self.errno) or 'EUNKNOWN'
+
+    def __str__(self):
+        return f'[{self.get_error_name()}] {self.errmsg}'
+
+
+class NotFoundException(ValidationException):
+    def __init__(self, error):
+        super().__init__(error, errno.ENOENT)
+
+
+class TrainNotFoundException(NotFoundException):
+    def __init__(self):
+        super(TrainNotFoundException, self).__init__('Failed to find train')
+
+
+class CatalogItemNotFoundException(NotFoundException):
+    def __init__(self, path):
+        super(CatalogItemNotFoundException, self).__init__(f'Failed to find {path!r} catalog item')
+
+
+def update_train_charts(train_path):
+    # We will gather all charts in the train and then for each chart all it's versions will be updated
+    if not os.path.exists(train_path):
+        raise TrainNotFoundException()
+
+    for item in os.listdir(train_path):
+        process_catalog_item(os.path.join(train_path, item))
+
+
+def process_catalog_item(item_path):
+    if not os.path.exists(item_path):
+        raise CatalogItemNotFoundException(item_path)
+
+    for item_version in os.listdir(item_path):
+        update_item_version(os.path.join(item_path, item_version))
+
+
+def update_item_version(version_path):
+    cp = subprocess.Popen(
+        ['helm', 'dependency', 'update', version_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE
+    )
+    stdout, stderr = cp.communicate()
+    if cp.returncode:
+        # TODO: Let's keep a log of success and failure scenarios
+        pass
+
+
+def main():
+    parser = argparse.ArgumentParser()
+    subparsers = parser.add_subparsers(help='sub-command help', dest='action')
+
+    parser_setup = subparsers.add_parser('update', help='Update dependencies for specified train')
+    parser_setup.add_argument('--train', help='Specify train path to update dependencies', required=True)
+
+    args = parser.parse_args()
+    if args.action == 'update':
+        update_train_charts(args.train)
+    else:
+        parser.print_help()
+
+
+if __name__ == '__main__':
+    main()