From 82e4d1ca348748e8cdde86f65e62221968cabed5 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Sun, 18 Apr 2021 21:46:12 +0200 Subject: Slight refactoring --- src/Module/AptModule.php | 48 ----------------------------------- src/Module/ModuleInterface.php | 6 +++++ src/Module/Modules/AptModule.php | 54 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 48 deletions(-) delete mode 100644 src/Module/AptModule.php create mode 100644 src/Module/Modules/AptModule.php (limited to 'src/Module') diff --git a/src/Module/AptModule.php b/src/Module/AptModule.php deleted file mode 100644 index ff4cb95..0000000 --- a/src/Module/AptModule.php +++ /dev/null @@ -1,48 +0,0 @@ -enablePTY(); - $ssh->exec("which $this->package"); - - if ($this->state === State::PRESENT) { - $state = ! empty($ssh->read()); - } - else if ($this->state === State::ABSENT) { - $state = empty($ssh->read()); - } - - $ssh->disablePTY(); - - return $state; - } - - public function getCommands(): array - { - if ($this->state === State::PRESENT) { - return [ - "sudo apt install -y $this->package", - ]; - } - else if ($this->state === State::ABSENT) { - return [ - "sudo apt remove -y $this->package", - ]; - } - - return []; - } -} diff --git a/src/Module/ModuleInterface.php b/src/Module/ModuleInterface.php index 2963b5f..649a095 100644 --- a/src/Module/ModuleInterface.php +++ b/src/Module/ModuleInterface.php @@ -4,7 +4,13 @@ namespace PHPIAC\Module; interface ModuleInterface { + /** + * @return bool + */ public function checkState(): bool; + /** + * @return array + */ public function getCommands(): array; } diff --git a/src/Module/Modules/AptModule.php b/src/Module/Modules/AptModule.php new file mode 100644 index 0000000..ccf4892 --- /dev/null +++ b/src/Module/Modules/AptModule.php @@ -0,0 +1,54 @@ +enablePTY(); + + $ssh->exec("dpkg -l $this->package | grep 'ii'"); + $dpkg = $ssh->read(); + + $state = match ($this->state) { + State::PRESENT => str_starts_with($dpkg, 'ii'), + State::ABSENT => str_contains($dpkg, 'no packages found'), + }; + + $ssh->disablePTY(); + + return $state; + } + + /** + * @inheritDoc + */ + public function getCommands(): array + { + return match ($this->state) { + State::PRESENT => ["sudo apt install -y $this->package"], + State::ABSENT => ["sudo apt remove -y $this->package"], + }; + } +} -- cgit v1.2.3