diff options
Diffstat (limited to 'src/AptModule.php')
| -rw-r--r-- | src/AptModule.php | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/src/AptModule.php b/src/AptModule.php new file mode 100644 index 0000000..9b882e8 --- /dev/null +++ b/src/AptModule.php @@ -0,0 +1,54 @@ +<?php + +namespace PHPIAC\Modules; + +use PHPIAC\Module\Module; +use PHPIAC\Module\State; +use phpseclib3\Net\SSH2; + +class AptModule extends Module +{ +    /** +     * AptModule constructor. +     * +     * @param string $package +     * @param string $state +     */ +    public function __construct( +        private string $package, +        private string $state = State::PRESENT +    ) {} + +    /** +     * @inheritDoc +     */ +    public function checkState(): bool +    { +        global $ssh; +        /**@var SSH2 $ssh*/ +        $ssh->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"], +        }; +    } +} | 
