From 7e94f9792a9a596cfd404adc4fc1ac1abe4bd33d Mon Sep 17 00:00:00 2001 From: garrettmills Date: Fri, 6 Mar 2020 09:49:08 -0600 Subject: [PATCH] Add package absent state --- app/classes/state/os/PackageAbsentState.js | 24 ++++++++++++++++++++++ app/services/states.service.js | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 app/classes/state/os/PackageAbsentState.js diff --git a/app/classes/state/os/PackageAbsentState.js b/app/classes/state/os/PackageAbsentState.js new file mode 100644 index 0000000..945ebe2 --- /dev/null +++ b/app/classes/state/os/PackageAbsentState.js @@ -0,0 +1,24 @@ +const State = require('../State') + +class PackageAbsentState extends State { + constructor(host, config) { + if ( !host.packages ) { + throw new Error(`Cannot apply package absent state to host ${host.name}: missing package manager API.`) + } + super(host, config) + } + + async reverse() { + return this._host.packages.install(this._config.package) + } + + async check() { + return !(await this._host.packages.is_installed(this._config.package)) + } + + async apply() { + return this._host.packages.uninstall(this._config.package) + } +} + +module.exports = exports = PackageAbsentState diff --git a/app/services/states.service.js b/app/services/states.service.js index 4b44fa4..00b5a20 100644 --- a/app/services/states.service.js +++ b/app/services/states.service.js @@ -14,7 +14,6 @@ class StatesService extends Service { // TODO apache and nginx states - virtual host, reverse proxy // TODO package repository states - import keys, install repository // TODO service manager states - service enabled, service installed, stopped - // TODO package states - uninstalled 'fs.file': require('../classes/state/fs/FileState'), 'fs.directory': require('../classes/state/fs/DirectoryState'), @@ -30,6 +29,7 @@ class StatesService extends Service { 'os.cmd': require('../classes/state/os/CommandState'), 'package.present': require('../classes/state/os/PackageState'), + 'package.absent': require('../classes/state/os/PackageAbsentState'), 'package.updates': require('../classes/state/os/UpdateState'), 'package.cache.clear': require('../classes/state/os/PackageCacheClearedState'),