/* * Copyright (c) 2015 Joyent Inc. All rights reserved. * * The `triton` CLI class. */ var assert = require('assert-plus'); var bunyan = require('bunyan'); var child_process = require('child_process'), spawn = child_process.spawn, exec = child_process.exec; var cmdln = require('cmdln'), Cmdln = cmdln.Cmdln; var fs = require('fs'); var util = require('util'), format = util.format; var vasync = require('vasync'); var common = require('./common'); var errors = require('./errors'); var Triton = require('./triton'); //---- globals var p = console.log; var pkg = require('../package.json'); var name = 'triton'; var log = bunyan.createLogger({ name: name, serializers: bunyan.stdSerializers, stream: process.stderr, level: 'warn' }); //---- CLI class function CLI() { Cmdln.call(this, { name: pkg.name, desc: pkg.description, options: [ {names: ['help', 'h'], type: 'bool', help: 'Print help and exit.'}, {name: 'version', type: 'bool', help: 'Print version and exit.'}, {names: ['verbose', 'v'], type: 'bool', help: 'Verbose/debug output.'}, // XXX disable profile selection for now //{names: ['profile', 'p'], type: 'string', env: 'TRITON_PROFILE', // helpArg: 'NAME', help: 'Triton client profile to use.'} ], helpOpts: { includeEnv: true, minHelpCol: 23 /* line up with option help */ }, helpSubcmds: [ 'help', { group: 'Instances (aka VMs/Machines/Containers)' }, 'create', 'instances', 'instance', 'instance-audit', 'start-instance', 'stop-instance', 'reboot-instance', 'ssh', { group: 'Images' }, 'images', 'image', { group: 'Packages' }, 'packages', 'package' ] }); } util.inherits(CLI, Cmdln); CLI.prototype.init = function (opts, args, callback) { var self = this; if (opts.version) { p(this.name, pkg.version); callback(false); return; } this.opts = opts; if (opts.verbose) { log.level('trace'); log.src = true; } this.__defineGetter__('triton', function () { if (self._triton === undefined) { self._triton = new Triton({log: log, profile: opts.profile}); } return self._triton; }); // Cmdln class handles `opts.help`. Cmdln.prototype.init.apply(this, arguments); }; //CLI.prototype.do_profile = require('./do_profile'); // Images CLI.prototype.do_images = require('./do_images'); CLI.prototype.do_image = require('./do_image'); // Instances (aka VMs/containers/machines) CLI.prototype.do_create = require('./do_create'); CLI.prototype.do_instance = require('./do_instance'); CLI.prototype.do_instances = require('./do_instances'); CLI.prototype.do_instance_audit = require('./do_instance_audit'); CLI.prototype.do_stop_instance = require('./do_startstop_instance')('stop'); CLI.prototype.do_start_instance = require('./do_startstop_instance')('start'); CLI.prototype.do_reboot_instance = require('./do_startstop_instance')('reboot'); CLI.prototype.do_ssh = require('./do_ssh'); // Packages CLI.prototype.do_packages = require('./do_packages'); CLI.prototype.do_package = require('./do_package'); // Hidden commands CLI.prototype.do_cloudapi = require('./do_cloudapi'); CLI.prototype.do_badger = require('./do_badger'); //---- mainline if (require.main === module) { var cli = new CLI(); cmdln.main(cli, {showNoCommandErr: false}); } //---- exports module.exports = CLI;