contribuciones en estancia con ekoa #1

Merged
pedro merged 17 commits from ekoa into main 2024-09-28 02:16:28 +00:00
3 changed files with 64 additions and 34 deletions
Showing only changes of commit 0545a2f460 - Show all commits

1
.gitignore vendored
View File

@ -1 +1,2 @@
iso iso
settings.ini

View File

@ -271,7 +271,7 @@ stty -echo # Do not show what we type in terminal so it does not meddle with our
dmesg -n 1 # Do not report *useless* system messages to the terminal dmesg -n 1 # Do not report *useless* system messages to the terminal
# clearly specify the right working directory, used in the python script as os.getcwd() # clearly specify the right working directory, used in the python script as os.getcwd()
cd /mnt cd /mnt
pipenv run python /opt/workbench/workbench-script.py pipenv run python /opt/workbench/workbench-script.py --config "/mnt/settings/settings.ini"
stty echo stty echo
END END
#TODO add some useful commands #TODO add some useful commands

View File

@ -5,6 +5,7 @@ import json
import uuid import uuid
import hashlib import hashlib
import argparse import argparse
import configparser
import ntplib import ntplib
import requests import requests
@ -253,6 +254,7 @@ def save_snapshot_in_disk(snapshot, path):
datetime.now().strftime("%Y%m%d-%H_%M_%S"), datetime.now().strftime("%Y%m%d-%H_%M_%S"),
snapshot['uuid'] snapshot['uuid']
) )
print(f"workbench: Snapshot written in path '{filename}'")
with open(filename, "w") as f: with open(filename, "w") as f:
f.write(json.dumps(snapshot)) f.write(json.dumps(snapshot))
@ -271,48 +273,75 @@ def sync_time():
ntplib.NTPClient() ntplib.NTPClient()
response = client.request('pool.ntp.org') response = client.request('pool.ntp.org')
def load_config(config_file="settings.ini"):
"""
Tries to load configuration from a config file.
"""
config = configparser.ConfigParser()
if os.path.exists(config_file):
# If config file exists, read from it
print(f"workbench: Found config file in path: '{config_file}'.")
config.read(config_file)
path = config.get('settings', 'path', fallback=os.getcwd())
# TODO validate that has http:// start
url = config.get('settings', 'url', fallback=None)
token = config.get('settings', 'token', fallback=None)
# TODO validate that the device exists?
device = config.get('settings', 'device', fallback=None)
erase = config.get('settings', 'erase', fallback=None)
else:
print(f"workbench: Config file '{config_file}' not found. Using default values.")
path = os.path.join(os.getcwd())
url, token, device, erase = None, None, None, None
return {
'path': path,
'url': url,
'token': token,
'device': device,
'erase': erase
}
def parse_args():
"""
Parse config argument, if available
"""
parser = argparse.ArgumentParser(description="Optional config loader for workbench.")
parser.add_argument(
'--config',
help="Path to the config file. Defaults to 'settings.ini' in the current directory.",
default="settings.ini" # Fallback to 'settings.ini' by default
)
return parser.parse_args()
def main(): def main():
print("\n\nworkbench: START\n\n") vline='\n___________\n\n'
parser=argparse.ArgumentParser() print(f"{vline}workbench: START\n")
parser.add_argument("-p", "--path", required=True)
parser.add_argument("-u", "--url", required=False)
parser.add_argument("-t", "--token", required=False)
parser.add_argument("-d", "--device", required=False)
parser.add_argument(
"-e",
"--erase",
choices=["basic", "baseline", "enhanced"],
required=False
)
args=parser.parse_args()
if args.device and not args.erase: # Parse the command-line arguments
print("error: argument --erase: expected one argument") args = parse_args()
return
if args.token and not args.url: # Load the config file, either specified via --config or the default 'settings.ini'
print("error: argument --url: expected one argument") config_file = args.config
return
if args.url and not args.token: config = load_config(config_file)
print("error: argument --token: expected one argument")
return
all_disks = get_disks() all_disks = get_disks()
snapshot = gen_snapshot(all_disks) snapshot = gen_snapshot(all_disks)
if args.erase and args.device: if config['erase'] and config['device']:
snapshot['erase'] = gen_erase(all_disks, args.erase, user_disk=args.device) snapshot['erase'] = gen_erase(all_disks, config['erase'], user_disk=config['device'])
elif args.erase: elif config['erase']:
snapshot['erase'] = gen_erase(all_disks, args.erase) snapshot['erase'] = gen_erase(all_disks, config['erase'])
save_snapshot_in_disk(snapshot, args.path) save_snapshot_in_disk(snapshot, config['path'])
if args.url: if config['url']:
send_snapshot_to_devicehub(snapshot, args.token, args.url) send_snapshot_to_devicehub(snapshot, config['token'], config['url'])
print("\n\nworkbench: END\n\n") print(f"\nworkbench: END{vline}")
if __name__ == '__main__': if __name__ == '__main__':