Start adding state classes; update dependencies

This commit is contained in:
garrettmills
2020-02-27 00:31:07 -06:00
parent e2016069f2
commit a49a26da48
14 changed files with 333 additions and 80 deletions

View File

@@ -0,0 +1,28 @@
const State = require('../State')
class PackageCacheClearedState extends State {
static get services() {
return [...super.services, 'output']
}
constructor(host, config) {
if ( !host.packages ) {
throw new Error(`Cannot apply package state to host ${host.name}: missing package manager API.`)
}
super(host, config)
}
async apply() {
return this._host.packages.clear_cache()
}
async check() {
return false
}
async reverse() {
this.output.warn(`Package cache cleared state does not currently support reversal. (Host: ${this._host.name})`)
}
}
module.exports = exports = PackageCacheClearedState

View File

@@ -0,0 +1,24 @@
const State = require('../State')
class PackageState extends State {
constructor(host, config) {
if ( !host.packages ) {
throw new Error(`Cannot apply package state to host ${host.name}: missing package manager API.`)
}
super(host, config)
}
async apply() {
return this._host.packages.install(this._config.package)
}
async check() {
return this._host.packages.is_installed(this._config.package)
}
async reverse() {
return this._host.packages.uninstall(this._config.package)
}
}
module.exports = exports = PackageState

View File

@@ -0,0 +1,28 @@
const State = require('../State')
class ServiceDaemonReloadState extends State {
static get services() {
return [...super.services, 'output']
}
constructor(host, config) {
if ( !host.services ) {
throw new Error(`Cannot apply service state to host ${host.name}: missing service manager API.`)
}
super(host, config)
}
async apply() {
return this._host.services.daemon_reload()
}
async check() {
return false
}
async reverse() {
this.output.warn(`Service daemon reload state does not currently support reversal. (Host: ${this._host.name})`)
}
}
module.exports = exports = ServiceDaemonReloadState

View File

@@ -0,0 +1,29 @@
const State = require('../State')
class ServiceRestartState extends State {
static get services() {
return [...super.services, 'output']
}
constructor(host, config) {
if ( !host.services ) {
throw new Error(`Cannot apply service state to host ${host.name}: missing service manager API.`)
}
super(host, config)
}
async apply() {
const services = Array.isArray(this._config.service) ? this._config.service : [this._config.service]
return this._host.services.restart(...services)
}
async check() {
return false
}
async reverse() {
this.output.warn(`Service restart state does not currently support reversal. (Host: ${this._host.name})`)
}
}
module.exports = exports = ServiceRestartState

View File

@@ -0,0 +1,29 @@
const State = require('../State')
class ServiceState extends State {
constructor(host, config) {
if ( !host.services ) {
throw new Error(`Cannot apply service state to host ${host.name}: missing service manager API.`)
}
super(host, config)
}
async apply() {
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.every(x => x.status === 'running')
}
async reverse() {
const services = Array.isArray(this._config.service) ? this._config.service : [this._config.service]
return this._host.services.stop(...services)
}
}
module.exports = exports = ServiceState

View File

@@ -0,0 +1,29 @@
const State = require('../State')
class UpdateState extends State {
static get services() {
return [...super.services, 'output']
}
constructor(host, config) {
if ( !host.packages ) {
throw new Error(`Cannot apply update state to host ${host.name}: missing package manager API.`)
}
super(host, config)
}
async apply() {
const packages = (await this._host.packages.list_updates()).map(x => x.name)
await this._host.packages.update(...packages)
}
async check() {
return (await this._host.packages.list_updates()).length === 0
}
async reverse() {
this.output.warn(`Update state does not currently support reversing package updates. (Host: ${this._host.name})`)
}
}
module.exports = exports = UpdateState