tritondatacenter / node-triton Goto Github PK
View Code? Open in Web Editor NEWTriton client tool and node.js library
Triton client tool and node.js library
It is a bit alarmist. A relavant discussion:
`destructiveAllowed`
meaning you can issue delete calls?
tRent
perhaps a bad name. That's the thing that says it can create and delete resources: instances, images, networks, etc.
we should change the name
angela
haha negative connotations - maybe it’s just me
tRent
the implication are:
- will take longer to run
- will use resources (which could result in cost on a public cloud)
- is deleting things, so has the *potential* to screw up
angela
if it’s false, we are just doing GETs?
Not sure if I've missed something. All I got was this:
$ triton completion
joyent-triton completion: error: Object #<CLI> has no method 'bashCompletion'
Can we use triton
to fill the gap we're facing without docker-machine
support just now?
For example, how do we feel about setting up the proper docker
environment vars using the current triton
account by doing:
eval $(triton docker env)
Has this been discussed already and I missed it?
Need to differentiate kvm vs lx in "triton images" output
$ triton images | grep -E 'SHORTID|ubuntu'
SHORTID NAME VERSION STATE FLAGS OS PUBDATE
e28711b3 ubuntu-certified-12.04 20140227 active P linux 2014-02-27
fe5aa6c0 ubuntu-certified-12.04 20140408 active P linux 2014-04-08
df165dad ubuntu-certified-14.04 20140416 active P linux 2014-04-16
7735fbba ubuntu-certified-14.04 20140519 active P linux 2014-05-19
0fd57f23 ubuntu-certified-12.04 20140519 active P linux 2014-05-19
f21af273 ubuntu-certified-12.04 20140608 active P linux 2014-06-08
286b0dc0 ubuntu-certified-14.04 20140608 active P linux 2014-06-08
202d0d26 ubuntu-certified-14.04 20140729 active P linux 2014-07-29
6c970fa8 ubuntu-certified-12.04 20140806 active P linux 2014-08-06
d0fb3c79 ubuntu-certified-12.04 20140926 active P linux 2014-09-26
c841e585 ubuntu-certified-14.04 20140926 active P linux 2014-09-26
01a24b88 ubuntu-certified-12.04 20140929 active P linux 2014-09-29
5f67e820 ubuntu-certified-14.04 20140929 active P linux 2014-09-29
47c62485 ubuntu-certified-14.10 20141022.3 active P linux 2014-10-22
be16f02b ubuntu-certified-12.04 20150127 active P linux 2015-01-27
c864f104 ubuntu-certified-14.04 20150225.2 active P linux 2015-02-25
415e39e6 ubuntu-certified-12.04 20150225.1 active P linux 2015-02-25
430da066 ubuntu-14.04 20150415 active P linux 2015-04-15
a21a64a0 ubuntu-14.04 20150601 active P linux 2015-06-01
5a0145ee ubuntu-14.04 20150618 active P linux 2015-06-18
7a56eecc ubuntu-14.04 20150625 active P linux 2015-06-25
0bd891a8 ubuntu-14.04 20150629 active P linux 2015-06-29
506bd05d ubuntu-certified-12.04 20150709 active P linux 2015-07-09
143e254a ubuntu-certified-14.04 20150708 active P linux 2015-07-09
a41ffcbc ubuntu-certified-14.10 20150708 active P linux 2015-07-09
ead4ff68 ubuntu-14.04 20150724 active P linux 2015-07-24
b33d4dec ubuntu-certified-15.04 20150807 active P linux 2015-08-08
c8d68a9e ubuntu-14.04 20150819 active P linux 2015-08-19
I can't tell which of those are Lx-brand and which are kvm images.
Possible Solutions
For sdc-adminui listing, I'm going to prepend "kvm" to the OS of zvol ones. Alternatively, you could introduce another column.
This will implement 'triton profiles' and profile selection support. However, it doesn't yet support creating new profiles, editing them or deleting them. 'triton profiles' will be a "hidden" command until then.
See, for example, pointing at staging-3
:
jclulow@jmcbook ~ $ triton create -w base-32-lts
/Users/jclulow/proj/node-triton/node_modules/assert-plus/assert.js:45
throw new assert.AssertionError({
^
AssertionError: options.package (string) is required
at Object.uuid (/Users/jclulow/proj/node-triton/node_modules/assert-plus/assert.js:165:9)
at CloudAPI.createMachine (/Users/jclulow/proj/node-triton/lib/cloudapi2.js:592:12)
at Object.createInst [as func] (/Users/jclulow/proj/node-triton/lib/do_create_instance.js:90:22)
at Immediate._onImmediate (/Users/jclulow/proj/node-triton/node_modules/vasync/lib/vasync.js:213:20)
at processImmediate [as _immediateCallback] (timers.js:367:17)
Obviously I'm missing the second argument (PACKAGE
). It's not clear if it is (as shown in the synopsis) optional or not. Either way, the message is not great.
Feature request: triton list
alias for triton instances
as i is really crowded.
$ triton i
image images img imgs info inst
instance instance-audit instances insts
source <(triton completion)
doesn't work on Mac 10.11.1 bash 3.2.57(1). It is documented in README.md .
It worked as expected on lx ubuntu-14.04@20150819 and when triton completion >> ~/.bashrc
on Mac.
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.1
BuildVersion: 15B17c
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
A bit of a corner case:
$ triton create --name=from-lx-image 4dce9fd4-1637-419b-9109-ca570e2239d6 t4-standard-1G
Creating instance from-lx-image (2057db45-8a13-4dab-fd53-a34f82c77b13, undefined@undefined, t4-standard-1G)
This corresponds to the request for cloudapi PUBAPI-1117. I don't know where the change is best implemented - cloudapi, cloudapi v2, or at the CLI level. We'll have to think about how it works with the -w
flag if we allow user to specify some -n
option to provision multiple.
If triton insts
is run very early in the provisioning process, before an IP is assigned it'll throw an exception.
Phoenix:~] triton create base-64-lts g3-standard-0.25-smartos -n bmake-deploy
Creating instance bmake-deploy (c5d66161-5a7d-4ab0-e029-a4ddfc14c9ab, [email protected], g3-standard-0.25-smartos)
Phoenix:~] triton insts
/opt/pkg/lib/node_modules/joyent-triton/node_modules/tabula/lib/tabula.js:277
throw new Error('no property ' + s.join(c) + ' found');
^
Error: no property primaryIp found
at dottedLookup (/opt/pkg/lib/node_modules/joyent-triton/node_modules/tabula/lib/tabula.js:277:19)
at Array.4 (/opt/pkg/lib/node_modules/joyent-triton/node_modules/tabula/lib/tabula.js:181:24)
at /opt/pkg/lib/node_modules/joyent-triton/node_modules/tabula/lib/tabula.js:206:35
at Array.forEach (native)
at tabulaFormat (/opt/pkg/lib/node_modules/joyent-triton/node_modules/tabula/lib/tabula.js:203:11)
at tabulaPrint (/opt/pkg/lib/node_modules/joyent-triton/node_modules/tabula/lib/tabula.js:259:26)
at done (/opt/pkg/lib/node_modules/joyent-triton/lib/do_instances.js:110:13)
at /opt/pkg/lib/node_modules/joyent-triton/lib/do_instances.js:83:9
at LOMStream.<anonymous> (/opt/pkg/lib/node_modules/joyent-triton/lib/cloudapi2.js:588:9)
at LOMStream.emit (events.js:92:17)
These commands were run within about 3 seconds of each other.
Looks like it was skeleton code at the moment. Should I just update Help to take it out for now?
$ triton create -wn my-machine [email protected] t4-standard-128M
Creating instance my-machine (11e9c842-0546-c806-b6d3-aa71f5b18af8, [email protected], t4-standard-128M)
Created instance my-machine (11e9c842-0546-c806-b6d3-aa71f5b18af8) in 44s
$ triton create -wn my-machine [email protected] t4-standard-128M
triton create: error (ValidationFailed): Invalid VM parameters: Invalid machine name
"Invalid machine name", while correct, is not that descriptive for duplicates
$ export TRITON_PROFILE=east3b
$ triton profile
account: trentm
curr: false
insecure: true
keyId: de:e7:73:9a:b0:91:31:3e:72:8d:9f:62:ca:58:a2:ec
name: coal
url: https://api.coal
Where my "coal" profile is what is in my config as the current profile.
README.md
starts with ![logo](https://www.joyent.com/content/01-home/triton-logo.svg)
that "logo" is white fill, fill="#fff"/><path fill="#fff"
view-source:https://www.joyent.com/content/01-home/triton-logo.svg .
For example:
$ triton create
triton create: error (Usage): incorrect number of args (0):
This should probably also print the help message, or at least the usage synopsis.
I'd love to be able to tell Mac users to install triton
using a command like brew install triton
and be done. Many of us are using brew
to install node
and npm
, so the package dependencies are already there, and the win in convenience is huge.
(this is also PUBAPI-1166)
Currently there are sprintf calls in node-smartdc,manta,triton etc which generate the Authorization headers for HTTP signature auth in these tools. We should switch to using the new async RequestSigner API in http-signature
1.0 and centralize all this duplicated code.
The -J
flag to select the datacenter isn't working anymore.
I only have one profile.
Phoenix:~] triton profiles
NAME CURR ACCOUNT URL
env * bbennett https://us-west-1.api.joyent.com
List of instances in my default profile
Phoenix:~] triton insts
SHORTID NAME IMG STATE PRIMARYIP AGO
969c262c gray.digitalelf.net [email protected] running 165.225.150.182 1y
8d7e7bb5 docker-build ubuntu-certified-14.10@20150708 running 165.225.151.57 2w
c5d66161 bmake-deploy [email protected] running 165.225.150.8 4d
Selecting us-sw-1
produces the same result as us-west-1
.
Phoenix:~] triton -J us-sw-1 insts
SHORTID NAME IMG STATE PRIMARYIP AGO
969c262c gray.digitalelf.net [email protected] running 165.225.150.182 1y
8d7e7bb5 docker-build ubuntu-certified-14.10@20150708 running 165.225.151.57 2w
c5d66161 bmake-deploy [email protected] running 165.225.150.8 4d
But sdc-listmachines shows the real set.
Phoenix:~] sdc-listmachines -u https://us-sw-1.api.joyent.com/ | json -Ha name state primaryIp
pi-builder running 165.225.157.114
freebsd running 64.30.128.85
hopeful_hoover stopped 64.30.128.170
Similar to #44.
Phoenix:~] triton -p home insts
triton insts: error: DEPTH_ZERO_SELF_SIGNED_CERT
Phoenix:~] triton -p home -i insts '-> 1
/opt/pkg/lib/node_modules/joyent-triton/lib/cloudapi2.js:556
var resourcecount = res.headers['x-resource-count'];
^
TypeError: Cannot read property 'headers' of null
at /opt/pkg/lib/node_modules/joyent-triton/lib/cloudapi2.js:556:36
at parseResponse (/opt/pkg/lib/node_modules/joyent-triton/node_modules/restify-clients/lib/JsonClient.js:92:9)
at ClientRequest.parseResponse (/opt/pkg/lib/node_modules/joyent-triton/node_modules/restify-clients/lib/StringClient.js:215:13)
at ClientRequest.g (events.js:180:16)
at ClientRequest.emit (events.js:98:17)
at _emitResult (/opt/pkg/lib/node_modules/joyent-triton/node_modules/restify-clients/lib/HttpClient.js:151:14)
at f (/opt/pkg/lib/node_modules/joyent-triton/node_modules/once/once.js:17:25)
at /opt/pkg/lib/node_modules/joyent-triton/node_modules/restify-clients/lib/HttpClient.js:189:17
at process._tickCallback (node.js:448:13)
But works with sdc-*
Phoenix:~] SDC_TESTING=1 sdc-listmachines -u https://cloudapi/ | json -Ha id state
9d6158b6-6175-41b3-f966-eddf1f7e3fc5 running
bec368ba-7e3b-6db1-923b-d3db8f92d9af running
8c4bf356-da3d-c074-f6d4-8758f85b8195 running
7020eeeb-969c-e1be-85ac-e19f155ea38e running
3734d6c4-8c2a-4798-8249-994a8641745c running
ee844fad-6d57-61fe-8f56-f5c39b0bf60e running
1126ffdf-08d1-cd46-d165-e4c7e554a9a9 running
8ab474d1-c420-ebf3-c187-82f9e1bea474 running
Phoenix:~]
See https://smartos.org/bugview/PUBAPI-1163
This equates to just a bump of our dep on smartdc-auth
triton ssh <instance>
appears to hang because there's no output from the command. Logging into the instance directly with ssh shows me that the triton nested session is in fact logged in, and that commands are being executed.
Typing exit
, logout
, or ^D
returns me to my local shell.
Update (by @trentm 2016-03-11): adding a known issue for anyone hitting thise or curious about the workaround added in triton version 4.8.0.
triton instance ssh
works by spawning ssh
(with node's
child_process.spawn
).
There is a known issue with SSH connection multiplexing (a.k.a.
ControlMaster, mux) where stdout/stderr is lost. As a workaround, ssh
is spawned with options disabling ControlMaster.
If you want to use ControlMaster here is an alternative:
ssh root@$(triton ip <inst>)
E.g. with -i for my 'coal-trentm' profile:
$ cat ~/.triton/profiles.d/coal-trentm.json
{
"url": "https://10.88.88.6",
"account": "trentm",
"keyId": "de:e7:73:9a:b0:91:31:3e:72:8d:9f:62:ca:58:a2:ec"
}
$ triton insts
triton insts: error: DEPTH_ZERO_SELF_SIGNED_CERT
$ triton -i insts
triton insts: error: DEPTH_ZERO_SELF_SIGNED_CERT
https://github.com/joyent/node-triton/blob/master/lib/do_create_instance.js#L104
figure out a way to get the image name and version from a UUID from the cache only when displaying the output of triton create
$ rm -rf ~/.triton/
$ triton instances
{"name":"triton","hostname":"joyent-laptop.local","pid":45472,"level":40,"err":{"message":"ENOENT, open '/Users/dave.eddy/.triton/cache/dave_eddy_joyent_com@us-east-3b_api_joyent_com/images.json'","name":"Error","stack":"Error: ENOENT, open '/Users/dave.eddy/.triton/cache/dave_eddy_joyent_com@us-east-3b_api_joyent_com/images.json'","code":"ENOENT"},"cacheFile":"/Users/dave.eddy/.triton/cache/dave_eddy_joyent_com@us-east-3b_api_joyent_com/images.json","msg":"failed to read cache file","time":"2015-09-08T18:28:51.638Z","v":0}
SHORTID NAME IMG STATE PRIMARYIP AGO
Aka listing firewall rules, toggling the firewall, and creating rules.
With the ability for user to create their own fabric networks opening up soon, it'll be important to display the fabric (true/false) value. To make room for that, and to be consistent with other triton api, it'll be good to add support for shortId for networks as well.
please
I was hitting the following when I had a triton profile for talking to my COAL's cloudapi. What happened was that after building a new COAL, what had been the IP for cloudapi was now the IP for adminui. The result:
$ triton -v imgs 2>&1 | bunyan
...
[2015-09-23T19:15:25.689Z] TRACE: triton/39097 on danger0.local (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/JsonClient.js:55 in parseResponse): Invalid JSON in response
SyntaxError: Unexpected token <
at Object.parse (native)
at parseResponse (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/JsonClient.js:50:28)
at IncomingMessage.done (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/StringClient.js:180:13)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:944:16
at process._tickCallback (node.js:448:13)
/Users/trentm/joy/node-triton/node_modules/assert-plus/assert.js:87
throw new assert.AssertionError({
^
AssertionError: items ([object]) required
at tabulaFormat (/Users/trentm/joy/node-triton/node_modules/tabula/lib/tabula.js:123:12)
at tabulaPrint (/Users/trentm/joy/node-triton/node_modules/tabula/lib/tabula.js:259:26)
at onRes (/Users/trentm/joy/node-triton/lib/do_images.js:98:13)
at /Users/trentm/joy/node-triton/lib/tritonapi.js:244:13
at next (/Users/trentm/joy/node-triton/node_modules/vasync/lib/vasync.js:201:4)
at /Users/trentm/joy/node-triton/lib/tritonapi.js:137:9
at Object.oncomplete (fs.js:108:15)
do we need this module to simply find JSON files?
var files = glob.sync(path.resolve(opts.configDir, 'profiles.d', '*.json'));
for (var i = 0; i < files.length; i++) {
..
}
could become
var d = path.join(opts.configDir, 'profiles.d');
var files = fs.readdirSync(d);
files.forEach(function (file) {
var ext = path.extname(file);
if (ext !== 'json')
return;
var fullpath = path.join(d, file);
...
});
glob
does a lot more than we really need it for
Because if I look at current insts:
$ triton insts
SHORTID NAME IMG STATE PRIMARYIP AGO
0227ae00 Achilles-20141003T051139Z-0 [email protected] running 172.26.3.29 50w
8e3aae37 test0 [email protected] running 172.26.3.61 2h
4fa9e7e7 test1kvm [email protected] running 172.26.3.62 2h
and want another of [email protected], I should be able to use that string for the image. But I get:
$ triton create -w -n test1 [email protected] t4-standard-256M
triton create: error: no image with name or short id "[email protected]" was found
ver info (hrm, that could be improved to show commit number or something):
$ triton --version
triton 1.0.0
Show a nice tree output for docker images, aka:
https://github.com/justone/dockviz/
Docker used to have this ability (to show a tree of images) but it was removed, c.f.
https://groups.google.com/forum/#!topic/docker-user/KJJkFU6eyGU
$ triton info
trentm - undefined undefined <test+trentm@localhost>
https://10.88.88.5
0 instance(s)
- 0 B RAM Total
- 0 B Disk Total
triton account
and docker info
)Also, I'm wondering about changing the JSON output from triton info -j
to just be the fields shown, i.e. just the counts and totals instead of the full list of instances so that we aren't stuck promising that. If triton info
becomes heavily used we'd like to be able to make that quicker on the server side with an info endpoint that could be faster.
...
[2015-09-08T18:24:50.339Z] TRACE: triton/14482 on danger0.local (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/StringClient.js:166 in done):
body received:
{"code":"ValidationFailed","message":"Invalid VM parameters","errors":[{"field":"cpu_cap","code":"Invalid","message":"Not a valid number: number must be >= 0"}]}
joyent-triton create: error (ValidationFailed): ValidationFailedError: Invalid VM parameters
at parseResponse (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/JsonClient.js:72:26)
at IncomingMessage.done (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/StringClient.js:180:13)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:944:16
at process._tickCallback (node.js:448:13)
Specifically, this error was due to a hacked up package (cpu_cap
set to null), but that "error" response body should get into the error message in general. See possible example from 'sdc-imgapi-cli.git'.
I want to be able to test api versioning on cloudapi with -H api-version:6.5
for example. Pretty please.
$ triton insts
{"name":"triton","hostname":"danger0.local","pid":29163,"level":40,"err":{"message":"Unexpected end of input","name":"SyntaxError","stack":"SyntaxError: Unexpected end of input\n at Object.parse (native)\n at /Users/trentm/joy/node-triton/lib/tritonapi.js:161:28\n at fs.js:272:14\n at Object.oncomplete (fs.js:108:15)"},"keyPath":"/Users/trentm/.triton/cache/trentm@10_88_88_3/images.json","msg":"error parsing JSON cache file","time":"2015-09-18T23:51:12.731Z","v":0}
assert.js:93
throw new assert.AssertionError({
^
AssertionError: false == true
at Object.module.exports.(anonymous function) [as ok] (/Users/trentm/joy/node-triton/node_modules/assert-plus/assert.js:242:35)
at lomValidData (/Users/trentm/joy/node-triton/node_modules/lomstream/lib/lomstream.js:278:13)
at lomFetchDoneCallback (/Users/trentm/joy/node-triton/node_modules/lomstream/lib/lomstream.js:344:2)
at donecb (/Users/trentm/joy/node-triton/node_modules/lomstream/lib/lomstream.js:399:3)
at /Users/trentm/joy/node-triton/lib/cloudapi2.js:558:13
at parseResponse (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/JsonClient.js:92:9)
at IncomingMessage.done (/Users/trentm/joy/node-triton/node_modules/restify-clients/lib/StringClient.js:180:13)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:944:16
triton ssh INSTANCE_NAME
will fail on an instance based on ubuntu-certified with the following error:
[christopher@JoyentMacBookPro ~/GitHub/node-triton]$ triton ssh ubuntu-certified-14.04-20150805
Warning: Permanently added '8.12.42.20' (ECDSA) to the list of known hosts.
Please login as the user "ubuntu" rather than the user "root".
Connection to 8.12.42.20 closed.
See https://smartos.org/bugview/PUBAPI-1146
This allows the profile keyId to be any hash algorithm version of a ssh key fingerprint. In recentish OpenSSH the ssh-keygen -l -f KEYFILE
default changes from and md5 fingerprint to a sha256 fingerprint.
This ticket is about accepting a keyId config using any of the hash algs for the fingerprint.
# triton profiles (read only)
# triton profile env
# running: triton profile -j env
ok 47 no error running child process
ok 48 no stderr produced
ok 49 stdout produced
not ok 50 env account correct
---
operator: equal
expected: 'trent.mick'
actual: 'trentm'
...
ok 51 env keyId correct
not ok 52 env url correct
---
operator: equal
expected: |-
'https://us-east-3b.api.joyent.com'
actual: |-
'https://api.coal'
...
$ cat ~/.triton/profiles.d/foo.json | json name
e3b
$ triton profiles
NAME CURR ACCOUNT URL
env * [email protected] https://us-east-3b.api.joyent.com
foo [email protected] https://us-east-3b.api.joyent.com
it uses the filename and not the name field... perhaps "name" is redundant?
Running trition insts resulted in output like this:
ravio:node-triton Michael.Zeller$ triton insts
SHORTID NAME STATE TYPE IMG MEMORY DISK AGO
e237c065 btsync running smartmachine 818cc79e-ceb3-11e4-99ee-7bc8c674e754 512 25600 20w
dc4f8fd3 go running smartmachine [email protected] 128 10240 22w
Trent suggested running triton images > /dev/null
and running again, which resulted in:
e237c065 btsync running smartmachine lx-ubuntu-14.04@20150320 512 25600 20w
dc4f8fd3 go running smartmachine [email protected] 128 10240 22w
Hi @bahamas10 / @trentm - The current readme doesn't include all supported features yet and can use some more background info on how it relates to cloudapi and docker api. Here is the revise readme I am proposing:
https://gist.github.com/askfongjojo/f5b58217ffacb70df732
I'd like to get your review before updating it directly on the repo. Let me know what you think and I'll complete the update with your feedback. Thanks!
Currently you can't pass triton delete
more than one instance to delete:
triton delete 87674f01 28b379f3
triton delete: error: invalid args: 87674f01,28b379f3
It would be great if you could pass it a list of instances to delete.
node-triton currently doesn't support passing in a user-script when issuing a create.
The triton wait
command is currently pretty silent; it could conceivably draw a spinner like triton create -w
does.
Perhaps even a big spinner.
node-triton should support CloudAPI rbac: https://docs.joyent.com/public-cloud/rbac
I didn't have mac xcode or mac command line tools installed, so the dtrace install portion understandably failed. triton --version
didn't like not finding the dtrace module.
oyd:node-triton ll$ npm install -g .
|
> [email protected] install /usr/local/lib/node_modules/joyent-triton/node_modules/restify-clients/node_modules/dtrace-provider
> node scripts/install.js
---------------
Building dtrace-provider failed with exit code 1 and signal 0
re-run install with environment variable V set to see the build output
---------------
> [email protected] install /usr/local/lib/node_modules/joyent-triton/node_modules/bunyan/node_modules/dtrace-provider
> node scripts/install.js
---------------
Building dtrace-provider failed with exit code 1 and signal 0
re-run install with environment variable V set to see the build output
---------------
/usr/local/bin/triton -> /usr/local/lib/node_modules/joyent-triton/bin/triton
[email protected] /usr/local/lib/node_modules/joyent-triton
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected])
oyd:node-triton ll$ triton --version
{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
triton 1.0.0
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.