@microbs.io/plugin-gke
Version:
microbs plugin - gke
110 lines (102 loc) • 2.53 kB
JavaScript
/*
* validate.js
*/
// Third-party packages
const commandExists = require('command-exists')
const semver = require('semver')
// Main packages
const { config, logger, utils } = require('@microbs.io/core')
/**
* Validate gcloud installation
*/
const validateGcloudInstallation = () => {
if (commandExists.sync('gcloud'))
return [{
success: true,
message: 'gcloud is installed'
}]
else
return [{
success: false,
message: 'gcloud is not installed'
}]
}
/**
* Validate gcloud version
*/
const validateGcloudVersion = () => {
const result = utils.exec('gcloud version', true)
if (result.stdout) {
try {
versionActual = semver.clean(result.stdout.match(/Google Cloud SDK (.+)/)[1])
versionRequired = semver.clean('383.0.0')
if (semver.gte(versionActual, versionRequired))
return [{
success: true,
message: `gcloud is correct version [using=${versionActual}, required>=${versionRequired}]`
}]
else
return [{
success: false,
message: `gcloud is incorrect version [using=${versionActual}, required>=${versionRequired}]`
}]
} catch (e) {
logger.error(e)
}
} else {
logger.warn(result.stderr)
}
}
/**
* Validate the fields and values of the given config file.
*/
const validateConfig = () => {
try {
config.init()
} catch (e) {
logger.error(e)
return [{
success: false,
message: 'failed to load config.'
}]
}
// Validate required fields
const requiredAlways = [
'plugins.gke.project_name',
'plugins.gke.region_name',
'plugins.gke.network_name',
'plugins.gke.subnetwork_name',
'plugins.gke.service_account_name',
'plugins.gke.service_account_key_path',
]
const results = []
var hasErrors = false
for (var i in requiredAlways) {
if (!config.get(requiredAlways[i])) {
hasErrors = true
results.push({
success: false,
message: `'${requiredAlways[i]}' is required but missing from gke plugin config.`
})
}
}
if (!hasErrors)
results.push({
success: true,
message: 'no problems detected in gke plugin config.'
})
return results
}
module.exports = async () => {
const results = []
validateGcloudInstallation().forEach(
(result) => results.push(result)
)
validateGcloudVersion().forEach(
(result) => results.push(result)
)
validateConfig().forEach(
(result) => results.push(result)
)
return results
}