Add service stopped state

This commit is contained in:
garrettmills 2020-03-06 21:14:15 -06:00
parent 7e94f9792a
commit e401809ad5
No known key found for this signature in database
GPG Key ID: 6ACD58D6ADACFC6E
2 changed files with 31 additions and 1 deletions

View File

@ -0,0 +1,29 @@
const State = require('../State')
class ServiceStoppedState extends State {
constructor(host, config) {
if ( !host.services ) {
throw new Error(`Cannot apply service stopped state to host ${host.name}: missing service manager API.`)
}
super(host, config)
}
async reverse() {
const services = Array.isArray(this._config.service) ? this._config.service : [this._config.service]
return this._host.services.start(...services)
}
async check() {
const services = Array.isArray(this._config.service) ? this._config.service : [this._config.service]
let states = await this._host.services.status(...services)
if ( !Array.isArray(states) ) states = [states]
return !states.some(x => x.status === 'running')
}
async apply() {
const services = Array.isArray(this._config.service) ? this._config.service : [this._config.service]
return this._host.services.stop(...services)
}
}
module.exports = exports = ServiceStoppedState

View File

@ -13,7 +13,7 @@ class StatesService extends Service {
static #state_map = {
// 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 service manager states - service enabled, service installed
'fs.file': require('../classes/state/fs/FileState'),
'fs.directory': require('../classes/state/fs/DirectoryState'),
@ -34,6 +34,7 @@ class StatesService extends Service {
'package.cache.clear': require('../classes/state/os/PackageCacheClearedState'),
'service.running': require('../classes/state/os/ServiceState'),
'service.stopped': require('../classes/state/os/ServiceStoppedState'),
'service.restarted': require('../classes/state/os/ServiceRestartState'),
'service.daemon.reloaded': require('../classes/state/os/ServiceDaemonReloadState'),