From bda8084172335c26346b79d4d8fcd5b0f2cf8159 Mon Sep 17 00:00:00 2001 From: jmsgrogan Date: Fri, 29 Mar 2024 12:39:44 +0000 Subject: [PATCH] Fixes to get example running. Start adding test. --- src/machine_admin/firewall.py | 6 ++++-- src/machine_admin/machine.py | 2 +- src/machine_admin/package_manager.py | 10 ++++++---- src/machine_admin/ssh_config.py | 8 ++++++-- src/machine_admin/user.py | 12 +++++++----- src/machine_admin/util.py | 4 +++- src/machine_setup.py | 9 ++++++++- test/requirements.txt | 1 + test/test_machine_setup.py | 11 +++++++++++ 9 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 test/requirements.txt create mode 100644 test/test_machine_setup.py diff --git a/src/machine_admin/firewall.py b/src/machine_admin/firewall.py index ee5ba35..3180eb6 100644 --- a/src/machine_admin/firewall.py +++ b/src/machine_admin/firewall.py @@ -2,6 +2,8 @@ import logging from .util import run_op +logger = logging.getLogger(__name__) + class UfwInterface: def __init__(self): @@ -9,12 +11,12 @@ class UfwInterface: def enable(self): op = "ufw enable" - logging.info(f"Enabling ufw: {op}") + logger.info(f"Enabling ufw: {op}") run_op(op) def allow_app(self, app_name: str): op = f"ufw allow {app_name}" - logging.info(f"Allowing ufw app: {op}") + logger.info(f"Allowing ufw app: {op}") run_op(op) class Firewall: diff --git a/src/machine_admin/machine.py b/src/machine_admin/machine.py index 1a2a7e0..3001e40 100644 --- a/src/machine_admin/machine.py +++ b/src/machine_admin/machine.py @@ -21,7 +21,7 @@ class Machine: self.ssh_config.restart_service() def setup(self): - self.package_manager.update() + self.package_manager.upgrade() self.user_manager.setup_user(self.user) self.enable_firewall() self.secure_ssh_config() diff --git a/src/machine_admin/package_manager.py b/src/machine_admin/package_manager.py index e7d25ae..a9a1ec3 100644 --- a/src/machine_admin/package_manager.py +++ b/src/machine_admin/package_manager.py @@ -2,6 +2,8 @@ import logging from .util import run_op +logger = logging.getLogger(__name__) + class AptInterface: def __init__(self): @@ -9,18 +11,18 @@ class AptInterface: def update(self): op = "apt-get update" - logging.info(f"Updating apt: {op}") + logger.info(f"Updating apt: {op}") run_op(op) def upgrade(self): op = "apt-get -y upgrade" - logging.info(f"Upgrading via apt: {op}") + logger.info(f"Upgrading via apt: {op}") run_op(op) def install_packages(self, packages: list): - packages_str = "".join(packages) + packages_str = " ".join(packages) op = f"apt-get install -y {packages_str}" - logging.info(f"Installing packages: {op}") + logger.info(f"Installing packages: {op}") run_op(op) diff --git a/src/machine_admin/ssh_config.py b/src/machine_admin/ssh_config.py index 6b65291..ad0b8d9 100644 --- a/src/machine_admin/ssh_config.py +++ b/src/machine_admin/ssh_config.py @@ -3,6 +3,8 @@ import logging from .util import run_op +logger = logging.getLogger(__name__) + class SshConfig: def __init__(self): @@ -13,14 +15,16 @@ class SshConfig: "UsePAM": "No"} def sync_target_values(self): - logging.info(f"Updating ssh config in: {self.config_path}") + logger.info(f"Updating ssh config in: {self.config_path}") pass def restart_service(self): op = "systemctl restart ssh" - logging.info(f"Restarting ssh service: {op}") + logger.info(f"Restarting ssh service: {op}") run_op(op) def copy_ssh_dir_to_user(self, username:str): op = f"rsync --archive --chown={username}:{username} ~/.ssh /home/{username}" + logger.info(f"Copying ssh dir to user: {op}") + run_op(op) \ No newline at end of file diff --git a/src/machine_admin/user.py b/src/machine_admin/user.py index c44d7c3..3570f35 100644 --- a/src/machine_admin/user.py +++ b/src/machine_admin/user.py @@ -1,6 +1,8 @@ import logging from .util import run_op +logger = logging.getLogger(__name__) + class User: def __init__(self, name, has_sudo=False): self.name = name @@ -8,20 +10,20 @@ class User: class UserManager: - def __init__(): + def __init__(self): pass def setup_user(self, user: User): - add_user(user) + self.add_user(user) if user.has_sudo: - add_user_to_sudo(user) + self.add_user_to_sudo(user) def add_user(self, user: User): op = f"adduser {user.name}" - logging.info(f"Adding user: {op}") + logger.info(f"Adding user: {op}") run_op(op) def add_user_to_sudo(self, user: User): op = f"usermod -aG sudo {user.name}" - logging.info(f"Adding user to sudo: {op}") + logger.info(f"Adding user to sudo: {op}") run_op(op) \ No newline at end of file diff --git a/src/machine_admin/util.py b/src/machine_admin/util.py index 7ae006e..ee3d938 100644 --- a/src/machine_admin/util.py +++ b/src/machine_admin/util.py @@ -1,6 +1,8 @@ import subprocess import logging +logger = logging.getLogger(__name__) + _DRY_RUN = False def set_is_dry_run(is_dry_run: bool): @@ -10,4 +12,4 @@ def run_op(op: str): if _DRY_RUN: return subprocess.run(op, shell=True) else: - logging.info(f"Dry Run | {op}") \ No newline at end of file + logger.info(f"Dry Run | {op}") \ No newline at end of file diff --git a/src/machine_setup.py b/src/machine_setup.py index 50bbbd4..f2ac28d 100644 --- a/src/machine_setup.py +++ b/src/machine_setup.py @@ -3,6 +3,9 @@ import logging from machine_admin.user import User from machine_admin.machine import Machine +from machine_admin.util import set_is_dry_run + +logger = logging.getLogger(__name__) if __name__ == "__main__": @@ -10,14 +13,18 @@ if __name__ == "__main__": prog='MachineSetup', description='Scripts for machine provisioning') - parser.add_argument('--username', + parser.add_argument('username', help="Name of the default non-root user") parser.add_argument('--dry_run', help="If set then don't change the system state - used for testing.", default = False) args = parser.parse_args() + set_is_dry_run(args.dry_run) + logging.basicConfig() + logging.getLogger().setLevel(logging.INFO) + user = User(args.username, has_sudo=True) machine = Machine(user) machine.setup() diff --git a/test/requirements.txt b/test/requirements.txt new file mode 100644 index 0000000..55b033e --- /dev/null +++ b/test/requirements.txt @@ -0,0 +1 @@ +pytest \ No newline at end of file diff --git a/test/test_machine_setup.py b/test/test_machine_setup.py new file mode 100644 index 0000000..2bf988b --- /dev/null +++ b/test/test_machine_setup.py @@ -0,0 +1,11 @@ +from machine_admin.util import set_is_dry_run +from machine_admin.user import User +from machine_admin.machine import Machine + +set_is_dry_run(True) + +def test_machine_setup(): + + user = User("test_user", has_sudo=True) + machine = Machine(user) + machine.setup() \ No newline at end of file