totvs-dtsenv-cli
Version:
TOTVS Datasul Environment Command Line
139 lines (108 loc) • 5.83 kB
text/typescript
import * as fs from "fs";
import * as child_process from 'child_process';
import * as dockerComposeSetup from './resources/docker-compose-setup.yml';
import CommandUtils from "../utils/CommandUtils";
import ProgressBarUtils from "../utils/ProgressBarUtils";
export default class SetupCommand {
constructor(private commander: any) {
commander.command('setup')
.description('Configura as informações mínimas para funcionamento dos ambientes.')
.action(SetupCommand.actionCommand)
}
static actionCommand() {
console.log("********************************************");
console.log("* SETUP DE AMBIENTE DO DOCKER LOCAL *");
console.log("********************************************");
console.log("\n");
console.log(" ## .");
console.log(" ## ## ## ==");
console.log(" ## ## ## ## ## ===");
console.log(" /''''''''''''''\___/ ===");
console.log(" ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~");
console.log(" \______ o __/");
console.log(" \ \ __/");
console.log(" \____\_______/");
console.log("\n");
console.log(" *** Verificando se a Docker já esta instalado ...");
console.log("\n");
/** Verifica se o Docker está instalado */
let cmd = CommandUtils.execCommandSync('docker-machine', ['version'])
if (cmd.length > 0 && cmd.indexOf("version", 0) > 0) {
console.log("Docker instalado!");
} else {
console.log("Baixe e instale a Docker Toolbox do link abaixo e tente novamente:");
console.log("https://download.docker.com/win/stable/DockerToolbox.exe");
return
}
/** Criando nova máquina virtual "default" */
/** Parando máquina virtual "default" */
try {
cmd = CommandUtils.execCommandSync('docker-machine', ['stop','default'], false)
}
catch(error) {
if (error.indexOf("already stopped", 0) === 0) {
console.log(error)
return
}
}
/** Removendo máquina virtual "default" */
try {
cmd = CommandUtils.execCommandSync('docker-machine', ['rm','default','-y'], false)
if (cmd.indexOf("Successfully removed default", 0) > 0) {
console.log("Maquina virtual default removida com sucesso!")
}
}
catch(error) {
if (error.indexOf("does not exist", 0) === 0) {
console.log(error)
return
}
}
console.log("Criando a nova maquina virtual... (esse processo poderá demorar alguns minutos).")
const barProcess = new ProgressBarUtils(true);
barProcess.start();
/** Cria a nova máquina virtual */
let execCreateDockerMachine = function(error:any, stdout:any, stderr:any) {
barProcess.stop();
cmd = stdout.toString('utf8')
if (cmd.indexOf("Docker is up and running!", 0) > 0) {
console.log("Máquina virtual criada com sucesso.")
}
/** Verifica se o Docker está funcionando corretamente */
cmd = CommandUtils.execCommandSync('docker', ['ps','-a'], false)
if (cmd.indexOf("CONTAINER ID", 0) > 0) {
console.log("Docker funcional.")
}
/** Efetua o login no repositório */
cmd = CommandUtils.execCommandSync('docker', ['login','-u','admin','-p','totvs@123','jv-fwk-dev02:5000'], false)
if (cmd.indexOf("Succeeded", 0) > 0) {
console.log("Login efetuado com sucesso no Registry do servidor jv-fwk-dev02.")
}
/** Parando máquina virtual */
cmd = CommandUtils.execCommandSync('docker-machine', ['stop'], false)
if (cmd.indexOf("was stopped", 0) > 0) {
console.log("Maquina virtual parada para criação dos compartilhamentos.")
}
/** Criando compartilhamentos */
cmd = CommandUtils.execCommandSync(process.env.VBOX_MSI_INSTALL_PATH + '\\vboxmanage', ['sharedfolder','add','default','--name','home/rootfwk/ipiranga','--hostpath','\\\\ipiranga\\progress_repository','--automount'], false)
cmd = CommandUtils.execCommandSync(process.env.VBOX_MSI_INSTALL_PATH + '\\vboxmanage', ['sharedfolder','add','default','--name','home/rootfwk/ibiza','--hostpath','\\\\ibiza\\Deltas','--automount'], false)
cmd = CommandUtils.execCommandSync(process.env.VBOX_MSI_INSTALL_PATH + '\\vboxmanage', ['sharedfolder','add','default','--name','home/rootfwk/users','--hostpath','\\\\jv-fwk-dev02\\users','--automount'], false)
cmd = CommandUtils.execCommandSync(process.env.VBOX_MSI_INSTALL_PATH + '\\vboxmanage', ['sharedfolder','add','default','--name','home/rootfwk/docker/projects','--hostpath',process.cwd(),'--automount'], false)
console.log("Compartilhamentos criados com sucesso.")
/** Iniciando máquina virtual */
cmd = CommandUtils.execCommandSync('docker-machine', ['start'], false)
/** Cria docker-compose do setup */
fs.writeFileSync(process.cwd() + '/docker-compose.yml', dockerComposeSetup.value);
console.log("Iniciando ambiente de gerenciamento.")
/** Iniciando ambiente de gerenciamento */
cmd = CommandUtils.execCommandSync('docker-compose', ['up','-d'], false)
/** Busca o endereço do IP Docker */
let ipDocker = CommandUtils.execCommandSync('docker-machine', ['ip','default'], false)
console.log("Ambiente iniciado com sucesso no IP: " + ipDocker)
console.log("Portainer: " + 'http://' + ipDocker.trim() + ':9000/#/init/admin')
console.log("Docker Compose: " + 'http://' + ipDocker.trim() + ':9100')
console.log('Setup finalizado com sucesso! Efetue um "dts add <Nome_Projeto>" para criar um novo projeto.')
}
CommandUtils.execCommand('docker-machine', ['create','-d','virtualbox','--virtualbox-disk-size','128000','--virtualbox-cpu-count','2','--virtualbox-memory','4096','--engine-insecure-registry','jv-fwk-dev02:5000','default'], execCreateDockerMachine)
}
}