From c1cd845d07c2e6b77e1971493f982546004b31ff Mon Sep 17 00:00:00 2001 From: Dylan Taylor Date: Wed, 19 May 2021 15:51:16 -0400 Subject: Added support for getting configuration from a URL --- archinstall/__init__.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/archinstall/__init__.py b/archinstall/__init__.py index 276d122f..91e0cb12 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -1,5 +1,8 @@ """Arch Linux installer - guided, templates etc.""" -from argparse import ArgumentParser, FileType +import urllib.error +import urllib.parse +import urllib.request +from argparse import ArgumentParser from .lib.disk import * from .lib.exceptions import * @@ -25,7 +28,7 @@ __version__ = "2.2.0.dev1" def initialize_arguments(): config = {} - parser.add_argument("--config", nargs="?", help="json config file", type=FileType("r", encoding="UTF-8")) + parser.add_argument("--config", nargs="?", help="JSON configuration file or URL") parser.add_argument("--silent", action="store_true", help="Warning!!! No prompts, ignored if config is not passed") parser.add_argument("--script", default="guided", nargs="?", help="Script to run for installation", type=str) @@ -41,7 +44,15 @@ def initialize_arguments(): args = parser.parse_args() if args.config is not None: try: - config = json.load(args.config) + # First, let's check if this is a URL scheme instead of a filename + parsed_url = urllib.parse.urlparse(args.config) + + if not parsed_url.scheme: # The Profile was not a direct match on a remote URL, it must be a local file. + with open(args.config) as file: + config = json.load(file) + else: # Attempt to load the configuration from the URL. + with urllib.request.urlopen(args.config) as response: + config = json.loads(response.read()) except Exception as e: print(e) # Installation can't be silent if config is not passed -- cgit v1.2.3-70-g09d2