first alpha

This commit is contained in:
Vyacheslav.Sviridov
2022-06-09 20:52:09 +06:00
parent 8b3e8ae5c8
commit fc41ae955f
54 changed files with 2416 additions and 1976 deletions

210
bin/enm-cli.js Normal file → Executable file
View File

@@ -1,98 +1,112 @@
#!/usr/bin/env node
const { Command, Option } = require('commander')
const pkg = require('../package.json')
const inquirer = require('inquirer')
const { isEmpty } = require('../util/validation')
require('dotenv').config()
const AutoProvisioning = require('../lib/components/AutoProvisioning/AutoProvisioning')
const TopologyBrowser = require('../lib/components/TopologyBrowser/TopologyBrowser')
const logError = require('../util/logError')
const applications = ['tplg', 'prvn']
const program = new Command()
program
.version(pkg.version)
// .option('-l, --login <letters>', 'ENM User Login')
// .option('-p, --password <letters>', 'ENM User Password')
.addOption(new Option('-l, --login <letters>', 'ENM User Login').env('LOGIN'))
.addOption(new Option('-p, --password <letters>', 'ENM User Password').env('PASSWORD'))
.addOption(new Option('-a, --application <letters>', 'Start specified application')
.choices(applications)
.default('tplg')
)
.requiredOption('-u, --url <letters>', 'ENM Url')
.parse(process.argv)
const options = program.opts()
async function promptUsername() {
const input = await inquirer.prompt([
{
type: 'input',
name: 'value',
suffix: chalk.bgGreen('?'),
message: 'Type ENM login',
validate: isEmpty,
}
])
return input.value
}
async function promptPassword() {
const input = await inquirer.prompt([
{
type: 'password',
name: 'value',
message: `Type ${options.login}'s ENM password`,
validate: isEmpty,
}
])
return input.value
}
async function selectApplication() {
let selectedApp
if (options.application && options.application in applications) {
selectedApp = options.application
} else {
const input = await inquirer.prompt([
{
type: 'list',
name: 'application',
suffix: '💾',
message,
choices: applications
}])
selectedApp = input.application
}
return {
tplg: TopologyBrowser,
prvn: AutoProvisioning
}[selectedApp]
}
async function main() {
try {
const app = new selectApplication()(options.login || await promptUsername(), options.password || await promptPassword(), options.url)
const result = await app.login()
const { code } = result
if (code === 'SUCCESS') {
await app.inputHandler()
await app.logout()
}
} catch (error) {
logError(error)
}
}
; (async () => await main())()
#!/usr/bin/env node
const { Command, Option } = require('commander')
const pkg = require('../package.json')
const inquirer = require('inquirer')
const path = require('path')
const { isEmpty } = require('../util/validation')
require('dotenv').config({ path: [...__dirname.split(path.sep).slice(0,-1), '.env'].join(path.sep) })
const AutoProvisioning = require('../lib/applications/AutoProvisioning/AutoProvisioning')
const TopologyBrowser = require('../lib/applications/TopologyBrowser/TopologyBrowser')
const logError = require('../util/logError')
if (process.env.NODE_ENV === 'development') {
process.on('uncaughtException', function (exception) {
console.log(exception);
})
}
const applications = [
{
id: 'tplg',
appClass: TopologyBrowser,
name: 'Topology Browser',
},
{
id: 'prvn',
appClass: AutoProvisioning,
name: 'Auto Provisioning',
}
]
const appIds = applications.map(item => item.id)
const program = new Command()
program
.version(pkg.version)
.addOption(new Option('-l, --login <letters>', 'ENM User Login').env('LOGIN'))
.addOption(new Option('-p, --password <letters>', 'ENM User Password').env('PASSWORD'))
.addOption(new Option('-a, --application <letters>', 'Start specified application')
.choices(appIds)
)
.requiredOption('-u, --url <valid URL>', 'ENM Url')
.parse(process.argv)
const options = program.opts()
async function promptUsername() {
const input = await inquirer.prompt([
{
type: 'input',
name: 'value',
prefix: '👤',
message: 'Type ENM login:',
validate: isEmpty,
}
])
return input.value
}
async function promptPassword() {
const input = await inquirer.prompt([
{
type: 'password',
name: 'value',
prefix: '🔑',
message: 'Type ENM password:',
validate: isEmpty,
}
])
return input.value
}
async function selectApplication() {
let selectedApp
if (options.application && appIds.includes(options.application)) {
selectedApp = options.application
} else {
const input = await inquirer.prompt([
{
type: 'list',
name: 'application',
prefix: '💾',
message: 'Select Application:',
choices: applications.map(item => ({name: item.name, value: item.id, short: item.id}))
}])
selectedApp = input.application
}
const { appClass } = applications.find(item => item.id === selectedApp)
const login = options.login || await promptUsername()
const password = options.password || await promptPassword()
return new appClass(login, password, options.url)
}
async function main() {
try {
const app = await selectApplication()
await app.login()
await app.inputHandler()
await app.logout()
} catch (error) {
logError(error)
}
}
;(async () => await main())()