UNPKG

fivem-docker-cli

Version:

Command-line tool to create and administer FiveM Servers running in Docker.

123 lines (114 loc) 4.08 kB
const {Command, flags} = require('@oclif/command'); const inquirer = require('inquirer'); const Docker = require('dockerode'); const docker = new Docker({socketPath: '/var/run/docker.sock'}); class InitCommand extends Command { async run() { const {flags} = this.parse(InitCommand); let usedPorts = []; let startingPort = 30120; let endingPort = 30139; let availablePorts = []; let availablePort; let servername = flags.servername; let licensekey = flags.licensekey; let rconpass = flags.rconpass; if (!flags.servername) { let responses = await inquirer.prompt([{ name: 'servername', message: 'Enter a name for your server. \n>', type: 'input' }]); servername = responses.servername } if (!flags.licensekey) { let responses = await inquirer.prompt([{ name: 'licensekey', message: 'Enter your server license key. This can be obtained from https://keymaster.fivem.net. \n>', type: 'input' }]); licensekey = responses.licensekey; } if (!flags.rconpass) { let responses = await inquirer.prompt([{ name: 'rconpass', message: 'Enter the password you would like to use for RCON access. \n>', type: 'input' }]); rconpass = responses.rconpass; } docker.listContainers({ all: true, }).then(containers => { containers.forEach(container => { console.log(container.Names + ":"); docker.getContainer(container.Id).inspect(data => { console.table(data); }); container.Ports.forEach(port => { console.log('Public Port: ' + port.PublicPort + '/' + port.Type); // port = parseInt(port, 10); // port.PublicPort(value => { // value = parseInt(value, 10); // if (value !== port) { // usedPorts.push(value); // } // }); }); }); }).catch(err => { console.error(err); }); // TODO: Get this fixed. // function getAvailablePort () { // for (let i = startingPort; i <= endingPort; i++) { // console.log('Checking port: ' + i); // console.table(usedPorts); // usedPorts.forEach(port => { // console.log('Used Port: ' + port); // if (port !== i) { // console.log('Available Port: ' + i); // availablePorts.push(i); // console.table(availablePorts); // } // }); // } // availablePort = availablePorts[0]; // } // docker.createContainer({ // name: "fivem-" + servername, //TODO: Assign the specified name to the container. Must match /?[a-zA-Z0-9_-]+ // Image: 'spritsail/fivem', // RestartPolicy: { // name: 'unless-stopped' // }, // Binds: [ // "/volumes/fivem/" + servername + ":/config" // ], // Env: ["LICENCE_KEY=" + licensekey, "RCON_PASSWORD=" + rconpass], // PortBindings: { // "30120/tcp": [{ "HostIp": "", "HostPort": availablePort }], // "30120/udp": [{ "HostIp": "", "HostPort": availablePort }] // } // }).then(container => { // console.log('FiveM Container Started:'); // console.log('ID: ' + container.id); // console.log('Name: ' + container.name); // console.log('Ports: ' + container.PortBindings.); // console.log('Directory: ' + ) // return container.start(); // }).catch(error => { // console.error(error.id + ": " + error.message); // }); // end } } InitCommand.description = `Creates a new FiveM server running in Docker ... Extra documentation goes here `; InitCommand.flags = { servername: flags.string({char: 's', description: 'Server name to identify the server internally'}), licensekey: flags.string({char: 'k', description: 'Server license key - This can be obtained from https://keymaster.fivem.net'}), rconpass: flags.string({description: 'Password for RCON access'}) }; module.exports = InitCommand;