Add OSM charms
[osm/devops.git] / installers / charm / generate_bundle.py
diff --git a/installers/charm/generate_bundle.py b/installers/charm/generate_bundle.py
new file mode 100644 (file)
index 0000000..95ffeaa
--- /dev/null
@@ -0,0 +1,65 @@
+# Copyright 2020 Canonical Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#     Unless required by applicable law or agreed to in writing, software
+#     distributed under the License is distributed on an "AS IS" BASIS,
+#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#     See the License for the specific language governing permissions and
+#     limitations under the License.
+import json
+import argparse
+
+CHANNEL_LIST = [
+    "stable",
+    "candidate",
+    "edge",
+]
+BUNDLE_PREFIX = "cs:~charmed-osm"
+DEFAULT_BUNDLE = "bundles/osm/bundle.yaml"
+HA_BUNDLE = "bundles/osm-ha/bundle.yaml"
+
+parser = argparse.ArgumentParser(description="Process some arguments.")
+
+parser.add_argument("--channel", help="Channel from the Charm Store")
+parser.add_argument("--destination", help="Destination for the generated bundle")
+parser.add_argument("--ha", help="Select HA bundle", action="store_true")
+parser.add_argument("--local", help="Path to the bundle directory", action="store_true")
+parser.add_argument("--store", help="Path to the bundle directory", action="store_true")
+
+args = parser.parse_args()
+print(args)
+if not args.local and not args.store:
+    raise Exception("--local or --store must be specified")
+if args.local and args.store:
+    raise Exception("Both --local and --store cannot be specified. Please choose one.")
+if not args.destination:
+    raise Exception("--destination must be specified")
+if args.channel and not args.channel in CHANNEL_LIST:
+    raise Exception(
+        "Channel {} does not exist. Please choose one of these: {}".format(
+            args.channel, CHANNEL_LIST
+        )
+    )
+channel = args.channel if args.channel else "stable"
+path = HA_BUNDLE if args.ha else DEFAULT_BUNDLE
+destination = args.destination
+prefix = "." if args.local else BUNDLE_PREFIX
+suffix = "/release" if args.local else ""
+
+data = {
+    "channel": channel,
+    "prefix": prefix,
+    "suffix": suffix,
+}
+
+with open(path) as template:
+    bundle_template = template.read()
+    template.close()
+with open("{}".format(destination), "w") as text_file:
+    text_file.write(bundle_template % data)
+    text_file.close()