diff --git a/CHANGES.md b/CHANGES.md index 954488c..f50ac9f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,11 @@ ## 4.0.1 (not yet released) -(nothing yet) +- Add `triton env -t` to be able to emit a shell environment to configure `triton` itself. + This allows one to have the following Bash function to select a Triton profile for + `triton` and node-smartdc tooling: + + function triton-select { eval $(triton env $1); } ## 4.0.0 diff --git a/lib/do_env.js b/lib/do_env.js index 94ddf58..aca133e 100644 --- a/lib/do_env.js +++ b/lib/do_env.js @@ -28,9 +28,16 @@ function do_env(subcmd, opts, args, cb) { } var profileName = args[0] || this.tritonapi.profile.name; - var clientType = 'smartdc'; + var allClientTypes = ['smartdc', 'triton']; + var clientTypes = []; if (opts.smartdc) { - clientType = 'smartdc'; + clientTypes.push('smartdc'); + } + if (opts.triton) { + clientTypes.push('triton'); + } + if (clientTypes.length === 0) { + clientTypes = allClientTypes; } try { @@ -46,28 +53,38 @@ function do_env(subcmd, opts, args, cb) { } var p = console.log; - switch (clientType) { - case 'smartdc': - p('export SDC_URL="%s"', profile.url); - p('export SDC_ACCOUNT="%s"', profile.account); - if (profile.user) { - p('export SDC_USER="%s"', profile.user); - } else { - p('unset SDC_USER'); + var shortOpts = ''; + clientTypes.forEach(function (clientType) { + switch (clientType) { + case 'triton': + shortOpts += 't'; + p('export TRITON_PROFILE="%s"', profile.name); + break; + case 'smartdc': + shortOpts += 's'; + p('export SDC_URL="%s"', profile.url); + p('export SDC_ACCOUNT="%s"', profile.account); + if (profile.user) { + p('export SDC_USER="%s"', profile.user); + } else { + p('unset SDC_USER'); + } + p('export SDC_KEY_ID="%s"', profile.keyId); + if (profile.insecure) { + p('export SDC_TESTING="%s"', profile.insecure); + } else { + p('unset SDC_TESTING'); + } + break; + default: + return cb(new errors.InternalError( + 'unknown clientType: ' + clientType)); } - p('export SDC_KEY_ID="%s"', profile.keyId); - if (profile.insecure) { - p('export SDC_TESTING="%s"', profile.insecure); - } else { - p('unset SDC_TESTING'); - } - p('# Run this command to configure your shell:'); - p('# eval "$(triton env -s %s)"', profile.name); - break; - default: - return cb(new errors.InternalError( - 'unknown clientType: ' + clientType)); - } + }); + + p('# Run this command to configure your shell:'); + p('# eval "$(triton env%s %s)"', + (shortOpts ? ' -'+shortOpts : ''), profile.name); } do_env.options = [ @@ -79,20 +96,24 @@ do_env.options = [ { names: ['smartdc', 's'], type: 'bool', - help: 'Emit environment commands for node-smartdc.' + help: 'Emit environment for node-smartdc (i.e. the "SDC_*" variables).' + }, + { + names: ['triton', 't'], + type: 'bool', + help: 'Emit environment commands for node-triton itself (i.e. the ' + + '"TRITON_PROFILE" variable).' } ]; +// TODO: support env for docker usage. do_env.help = [ /* BEGIN JSSTYLED */ 'Emit shell environment commands to setup clients for a particular CLI profile.', '', - 'Supported "clients" here are: node-smartdc (the `sdc-*` tools).', - 'TODO: support for `triton` and `docker`.', - '', - 'Note: By default this *currently* emits the environment for node-smartdc.', - 'However, automated usage should use `-s` to guaratee that. The default', - 'might change', + 'Supported "clients" here are: node-smartdc (i.e. the `sdc-*` tools),', + 'and node-triton itself. By default this emits the environment for all', + 'supported tools. Use options to be specific.', '', 'Usage:', ' {{name}} env [PROFILE]', diff --git a/lib/tritonapi.js b/lib/tritonapi.js index 84c0cf8..85fc972 100644 --- a/lib/tritonapi.js +++ b/lib/tritonapi.js @@ -370,6 +370,7 @@ TritonApi.prototype.getImage = function getImage(opts, cb) { if (version) { listOpts.name = name; listOpts.version = version; + // XXX This is bogus now? listOpts.useCache = opts.useCache; } this.cloudapi.listImages(listOpts, function (err, imgs) {