Merge pull request #139 from vatesfr/abhamonr-remember-disabled-servers

Save enabled state for each server
This commit is contained in:
Julien Fontanet
2015-11-25 13:54:44 +01:00
3 changed files with 21 additions and 12 deletions

View File

@@ -1,3 +1,5 @@
import { noop } from '../utils'
export async function add ({
host,
username,
@@ -74,7 +76,7 @@ export async function set ({id, host, username, password}) {
await this.updateXenServer(id, {host, username, password})
}
set.description = 'changes the propeorties of a Xen server'
set.description = 'changes the properties of a Xen server'
set.permission = 'admin'
@@ -99,6 +101,7 @@ set.params = {
// -------------------------------------------------------------------
export async function connect ({id}) {
this.updateXenServer(id, {enabled: true}).catch(noop)
await this.connectXenServer(id)
}
@@ -115,6 +118,7 @@ connect.params = {
// -------------------------------------------------------------------
export async function disconnect ({id}) {
this.updateXenServer(id, {enabled: false}).catch(noop)
await this.disconnectXenServer(id)
}

View File

@@ -1,3 +1,4 @@
import isString from 'lodash.isstring'
import {EventEmitter} from 'events'
import {
@@ -41,7 +42,7 @@ export default class Model extends EventEmitter {
set (properties, value) {
// This method can also be used with two arguments to set a single
// property.
if (value !== undefined) {
if (isString(properties)) {
properties = { [properties]: value }
}

View File

@@ -210,12 +210,14 @@ export default class Xo extends EventEmitter {
// Connects to existing servers.
const servers = await this._servers.get()
for (let server of servers) {
this.connectXenServer(server.id).catch(error => {
console.error(
`[WARN] ${server.host}:`,
error[0] || error.stack || error.code || error
)
})
if (server.enabled) {
this.connectXenServer(server.id).catch(error => {
console.error(
`[WARN] ${server.host}:`,
error[0] || error.stack || error.code || error
)
})
}
}
}
@@ -947,7 +949,7 @@ export default class Xo extends EventEmitter {
// FIXME: We are storing passwords which is bad!
// Could we use tokens instead?
// TODO: use plain objects
const server = await this._servers.create({host, username, password})
const server = await this._servers.create({host, username, password, enabled: 'true'})
return server.properties
}
@@ -960,13 +962,17 @@ export default class Xo extends EventEmitter {
}
}
async updateXenServer (id, {host, username, password}) {
async updateXenServer (id, {host, username, password, enabled}) {
const server = await this._getXenServer(id)
if (host) server.set('host', host)
if (username) server.set('username', username)
if (password) server.set('password', password)
if (enabled !== undefined) {
server.set('enabled', enabled ? 'true' : undefined)
}
await this._servers.update(server)
}
@@ -1007,7 +1013,6 @@ export default class Xo extends EventEmitter {
})
}
// TODO the previous state should be marked as connected.
async connectXenServer (id) {
const server = (await this._getXenServer(id)).properties
@@ -1068,7 +1073,6 @@ export default class Xo extends EventEmitter {
}
}
// TODO the previous state should be marked as disconnected.
async disconnectXenServer (id) {
const xapi = this._xapis[id]
if (!xapi) {