smartdc 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +1 -19
- data/.travis.yml +1 -1
- data/Gemfile +5 -11
- data/README.md +25 -40
- data/Rakefile +5 -5
- data/bin/sdc +4 -380
- data/config.ru +2 -0
- data/lib/smartdc.rb +23 -15
- data/lib/smartdc/api/analytics.rb +19 -36
- data/lib/smartdc/api/analytics/heatmap.rb +6 -15
- data/lib/smartdc/api/datacenters.rb +7 -16
- data/lib/smartdc/api/images.rb +11 -0
- data/lib/smartdc/api/keys.rb +13 -23
- data/lib/smartdc/api/machines.rb +26 -60
- data/lib/smartdc/api/machines/metadata.rb +15 -0
- data/lib/smartdc/api/machines/snapshots.rb +23 -0
- data/lib/smartdc/api/machines/tags.rb +19 -0
- data/lib/smartdc/api/packages.rb +7 -17
- data/lib/smartdc/auth.rb +39 -5
- data/lib/smartdc/cli.rb +65 -0
- data/lib/smartdc/cli/analytic.rb +52 -0
- data/lib/smartdc/cli/datacenter.rb +15 -0
- data/lib/smartdc/cli/image.rb +19 -0
- data/lib/smartdc/cli/key.rb +26 -0
- data/lib/smartdc/cli/machine.rb +79 -0
- data/lib/smartdc/cli/machine/metadata.rb +30 -0
- data/lib/smartdc/cli/machine/snapshot.rb +38 -0
- data/lib/smartdc/cli/machine/tag.rb +33 -0
- data/lib/smartdc/cli/package.rb +17 -0
- data/lib/smartdc/cli_configure.rb +81 -0
- data/lib/smartdc/cli_helper.rb +111 -0
- data/lib/smartdc/client.rb +33 -28
- data/lib/smartdc/configure.rb +30 -0
- data/lib/smartdc/default.rb +35 -0
- data/lib/smartdc/version.rb +1 -1
- data/smartdc.gemspec +20 -16
- data/spec/cassettes/analytics/create.yml +64 -0
- data/spec/cassettes/analytics/describe.yml +123 -0
- data/spec/cassettes/analytics/destroy.yml +56 -0
- data/spec/cassettes/analytics/index.yml +62 -0
- data/spec/cassettes/analytics/show.yml +62 -0
- data/spec/cassettes/analytics/value.yml +62 -0
- data/spec/cassettes/datacenters/index.yml +62 -0
- data/spec/cassettes/datacenters/show.yml +64 -0
- data/spec/cassettes/images/index.yml +519 -0
- data/spec/cassettes/images/show.yml +63 -0
- data/spec/cassettes/keys/create.yml +65 -0
- data/spec/cassettes/keys/destroy.yml +56 -0
- data/spec/cassettes/keys/index.yml +63 -0
- data/spec/cassettes/keys/show.yml +63 -0
- data/spec/cassettes/machines/create.yml +65 -0
- data/spec/cassettes/machines/destroy.yml +56 -0
- data/spec/cassettes/machines/index.yml +67 -0
- data/spec/cassettes/machines/metadata/destroy.yml +56 -0
- data/spec/cassettes/machines/metadata/index.yml +62 -0
- data/spec/cassettes/machines/metadata/update.yml +64 -0
- data/spec/cassettes/machines/reboot.yml +58 -0
- data/spec/cassettes/machines/show.yml +63 -0
- data/spec/cassettes/machines/snapshots/create.yml +62 -0
- data/spec/cassettes/machines/snapshots/destroy.yml +56 -0
- data/spec/cassettes/machines/snapshots/index.yml +62 -0
- data/spec/cassettes/machines/snapshots/show.yml +62 -0
- data/spec/cassettes/machines/snapshots/start.yml +58 -0
- data/spec/cassettes/machines/start.yml +58 -0
- data/spec/cassettes/machines/stop.yml +58 -0
- data/spec/cassettes/machines/tags/create.yml +64 -0
- data/spec/cassettes/machines/tags/destroy.yml +56 -0
- data/spec/cassettes/machines/tags/index.yml +62 -0
- data/spec/cassettes/machines/tags/show.yml +62 -0
- data/spec/cassettes/packages/index.yml +123 -0
- data/spec/cassettes/packages/show.yml +63 -0
- data/spec/fixtures/config/sdccfg +4 -0
- data/spec/fixtures/ssh/id_rsa +27 -0
- data/spec/fixtures/ssh/id_rsa.pub +1 -0
- data/spec/smartdc/api/analytics_spec.rb +47 -0
- data/spec/smartdc/api/datacenters_spec.rb +19 -0
- data/spec/smartdc/api/images_spec.rb +19 -0
- data/spec/smartdc/api/keys_spec.rb +34 -0
- data/spec/smartdc/api/machines/metadata_spec.rb +27 -0
- data/spec/smartdc/api/machines/snapshots_spec.rb +38 -0
- data/spec/smartdc/api/machines/tags_spec.rb +33 -0
- data/spec/smartdc/api/machines_spec.rb +59 -0
- data/spec/smartdc/api/packages_spec.rb +19 -0
- data/spec/smartdc/auth_spec.rb +25 -0
- data/spec/smartdc/cli_configure_spec.rb +32 -0
- data/spec/smartdc/client_spec.rb +11 -0
- data/spec/smartdc_spec.rb +44 -0
- data/spec/spec_helper.rb +25 -8
- metadata +176 -83
- data/lib/cli_helper.rb +0 -126
- data/lib/configure.rb +0 -125
- data/lib/smartdc/api/datasets.rb +0 -20
- data/lib/smartdc/api/machine/metadata.rb +0 -24
- data/lib/smartdc/api/machine/snapshots.rb +0 -35
- data/lib/smartdc/api/machine/tags.rb +0 -29
- data/lib/smartdc/error.rb +0 -35
- data/lib/smartdc/request.rb +0 -83
- data/lib/smartdc/response.rb +0 -25
- data/lib/smartdc/response/raise_error.rb +0 -38
- data/spec/fixtures/analytics.json +0 -26
- data/spec/fixtures/datacenter.json +0 -4
- data/spec/fixtures/datacenters.json +0 -3
- data/spec/fixtures/datasets.json +0 -38
- data/spec/fixtures/keys.json +0 -14
- data/spec/fixtures/machines.json +0 -36
- data/spec/fixtures/packages.json +0 -18
- data/spec/fixtures/snapshots.json +0 -8
- data/spec/fixtures/tag.json +0 -3
- data/spec/unit/smartdc/api/analytics_spec.rb +0 -48
- data/spec/unit/smartdc/api/datacenters_spec.rb +0 -28
- data/spec/unit/smartdc/api/datasets_spec.rb +0 -28
- data/spec/unit/smartdc/api/keys_spec.rb +0 -48
- data/spec/unit/smartdc/api/machine/metadata_spec.rb +0 -38
- data/spec/unit/smartdc/api/machine/snapshots_spec.rb +0 -48
- data/spec/unit/smartdc/api/machine/tags_spec.rb +0 -48
- data/spec/unit/smartdc/api/machines_spec.rb +0 -48
- data/spec/unit/smartdc/api/packages_spec.rb +0 -28
- data/spec/unit/smartdc/client_spec.rb +0 -40
- data/spec/unit/smartdc_spec.rb +0 -9
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 43aca47bac65dbbea7f700de8a255dad549a2c4c
|
|
4
|
+
data.tar.gz: f08ee46200f3a180d6275d64ff3a8d441bf1d045
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: d59373cf0eed55bf36af8aa155fedf954c5c5e02c7b9516b87de3e2b034756be6037b0b29edffe32978118faf00d04a394e04fc8c0dc0d1f06d0787e729dddd0
|
|
7
|
+
data.tar.gz: 5f5299ad3d49c477b8367188f9440c70b38116e6294ae34caa81cac367d03c31bf3c0c602af5f29fe123f92547e6d6c63b724f2659b39604284b1dc64012868e
|
data/.gitignore
CHANGED
|
@@ -1,24 +1,6 @@
|
|
|
1
|
-
*.gem
|
|
2
|
-
*.rbc
|
|
3
1
|
.bundle
|
|
4
|
-
.config
|
|
5
|
-
.yardoc
|
|
6
|
-
Gemfile.lock
|
|
7
|
-
InstalledFiles
|
|
8
|
-
_yardoc
|
|
9
|
-
coverage
|
|
10
|
-
doc/
|
|
11
|
-
lib/bundler/man
|
|
12
2
|
pkg
|
|
13
|
-
rdoc
|
|
14
|
-
spec/reports
|
|
15
|
-
test/tmp
|
|
16
|
-
test/version_tmp
|
|
17
3
|
tmp
|
|
18
|
-
|
|
19
|
-
.DS_Store
|
|
20
4
|
.rspec
|
|
21
5
|
.sdccfg
|
|
22
|
-
.
|
|
23
|
-
|
|
24
|
-
sftp-config.json
|
|
6
|
+
Gemfile.lock
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
group :development do
|
|
6
|
-
gem "bundler"
|
|
7
|
-
end
|
|
3
|
+
gemspec
|
|
8
4
|
|
|
9
5
|
group :test do
|
|
10
|
-
gem
|
|
6
|
+
gem 'rspec'
|
|
11
7
|
end
|
|
12
8
|
|
|
13
|
-
group :
|
|
14
|
-
gem
|
|
15
|
-
gem "thor", "~> 0.18"
|
|
16
|
-
gem "terminal-table", "~> 1.4"
|
|
9
|
+
group :development, :test do
|
|
10
|
+
gem 'webmock'
|
|
17
11
|
end
|
data/README.md
CHANGED
|
@@ -3,27 +3,16 @@ smartdc
|
|
|
3
3
|
|
|
4
4
|
[](https://rubygems.org/gems/smartdc) [](https://travis-ci.org/ogom/ruby-smartdc)
|
|
5
5
|
|
|
6
|
+
[Joyent CloudAPI](https://apidocs.joyent.com/cloudapi/) client and command line interface.
|
|
7
|
+
|
|
6
8
|
```
|
|
7
9
|
.
|
|
8
10
|
|
|
|
9
11
|
.-. .--. .-.| .-.
|
|
10
|
-
: + : `--.( | (
|
|
12
|
+
: + : `--.( | (
|
|
11
13
|
`-' `--' `-'`- `-'
|
|
12
|
-
|
|
13
14
|
```
|
|
14
15
|
|
|
15
|
-
smartdc is Joyent's [SmartDataCenter](http://www.joyent.com/software/smartdatacenter) client and SDC Command Line Interface.
|
|
16
|
-
[Joyent CloudAPI Documentation](http://apidocs.joyent.com/sdcapidoc/cloudapi/).
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## Features
|
|
20
|
-
|
|
21
|
-
* Response content is Hash.
|
|
22
|
-
* Debug output Request and Response.
|
|
23
|
-
* Output style is Table or JSON.
|
|
24
|
-
* CLI is sub command style.
|
|
25
|
-
|
|
26
|
-
|
|
27
16
|
## Installation
|
|
28
17
|
|
|
29
18
|
```
|
|
@@ -33,57 +22,53 @@ gem install smartdc
|
|
|
33
22
|
## Usage
|
|
34
23
|
|
|
35
24
|
### CLI
|
|
25
|
+
|
|
36
26
|
Invoke interactive configuration.
|
|
37
27
|
|
|
28
|
+
#### Creates machine
|
|
29
|
+
|
|
38
30
|
```
|
|
39
31
|
$ sdc init
|
|
40
|
-
$ sdc
|
|
41
|
-
$ sdc package
|
|
42
|
-
$ sdc machine add NAME -
|
|
43
|
-
$ sdc machine
|
|
32
|
+
$ sdc image list
|
|
33
|
+
$ sdc package list
|
|
34
|
+
$ sdc machine add NAME -i IMAGE_ID -p PACKAGE_ID
|
|
35
|
+
$ sdc machine list
|
|
44
36
|
```
|
|
45
37
|
|
|
46
|
-
|
|
47
38
|
#### Output JSON
|
|
39
|
+
|
|
48
40
|
JSON is set to body of response.
|
|
49
41
|
|
|
50
42
|
```
|
|
51
|
-
$ sdc machine
|
|
43
|
+
$ sdc machine list --raw
|
|
52
44
|
```
|
|
53
45
|
|
|
46
|
+
#### Use machine
|
|
54
47
|
|
|
55
|
-
#### Machine use
|
|
56
48
|
Set to config the Machine uuid.
|
|
57
49
|
|
|
58
50
|
```
|
|
59
|
-
$ sdc machine
|
|
60
|
-
$ sdc machine
|
|
61
|
-
$ sdc machine use
|
|
62
|
-
$ sdc machine
|
|
51
|
+
$ sdc machine list
|
|
52
|
+
$ sdc machine show MACHINE_ID
|
|
53
|
+
$ sdc machine use MACHINE_ID
|
|
54
|
+
$ sdc machine show
|
|
63
55
|
```
|
|
64
56
|
|
|
57
|
+
#### Receives machine
|
|
65
58
|
|
|
66
|
-
### Program
|
|
67
59
|
Hash is set to content of response.
|
|
68
60
|
|
|
69
61
|
```
|
|
70
62
|
require 'smartdc'
|
|
71
63
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
username
|
|
75
|
-
|
|
76
|
-
version: '~6.5'
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
client.machines.all.content.each do |machine|
|
|
80
|
-
p "#{machine['name']} is state at #{machine['state']}."
|
|
81
|
-
|
|
82
|
-
# Stop machine
|
|
83
|
-
p client.machines.stop(machine['id']).status
|
|
64
|
+
Smartdc.configure do |config|
|
|
65
|
+
config.url = 'https://example.com'
|
|
66
|
+
config.username = 'user'
|
|
67
|
+
config.use_key = '4c:02:f3:b2:09:fb:29:dd:41:97:da:80:bc:69:6c:f8'
|
|
84
68
|
end
|
|
85
|
-
```
|
|
86
69
|
|
|
70
|
+
Smartdc.machines.content
|
|
71
|
+
```
|
|
87
72
|
|
|
88
73
|
## Tests
|
|
89
74
|
|
|
@@ -91,6 +76,6 @@ end
|
|
|
91
76
|
$ rake spec
|
|
92
77
|
```
|
|
93
78
|
|
|
94
|
-
## License
|
|
79
|
+
## License
|
|
95
80
|
|
|
96
81
|
* MIT
|
data/Rakefile
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
2
2
|
|
|
3
|
-
require 'rspec/core'
|
|
4
3
|
require 'rspec/core/rake_task'
|
|
5
|
-
RSpec::Core::RakeTask.new(:spec) do |
|
|
6
|
-
|
|
4
|
+
RSpec::Core::RakeTask.new(:spec) do |task|
|
|
5
|
+
task.rspec_opts = ['--color', '--format', 'doc']
|
|
7
6
|
end
|
|
8
7
|
|
|
9
|
-
task :
|
|
8
|
+
task test: :spec
|
|
9
|
+
task default: :spec
|
data/bin/sdc
CHANGED
|
@@ -1,383 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
#
|
|
3
|
-
# sdc
|
|
4
|
-
# Copyright(c) 2012 ogom
|
|
5
|
-
# MIT Licensed
|
|
6
|
-
#
|
|
7
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
8
|
-
require 'cli_helper'
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if res.status == 200
|
|
14
|
-
res.content['primaryIp']
|
|
15
|
-
else
|
|
16
|
-
uuid
|
|
17
|
-
end
|
|
18
|
-
end
|
|
3
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
4
|
+
require 'smartdc'
|
|
5
|
+
require 'smartdc/cli'
|
|
19
6
|
|
|
20
|
-
|
|
21
|
-
class_option :debug, type: :boolean, aliases: '-d', desc: 'Debug output'
|
|
22
|
-
class_option :raw, type: :boolean, aliases: '-r', desc: 'Raw response body'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
class Key < CLI::Base
|
|
26
|
-
desc 'ls', 'Lists all public keys we have on record for the specified account.'
|
|
27
|
-
def ls
|
|
28
|
-
output sdc(config(options)).keys.all, {table: :h, exclude: [:key]}.merge(options)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
desc 'get [NAME]', 'Retrieves an individual key record.'
|
|
32
|
-
def get(name)
|
|
33
|
-
output sdc(config(options)).keys.read(name), {only: :key}.merge(options)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
desc 'add [NAME] [FILE]', 'Uploads a new OpenSSH key to SmartDataCenter.'
|
|
37
|
-
def add(name, file)
|
|
38
|
-
raw = {name: name}
|
|
39
|
-
raw[:key] = File.read(file)
|
|
40
|
-
output sdc(config(options)).keys.create(raw), {table: :v, exclude: [:key]}.merge(options)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
desc 'del [NAME]', 'Deletes an SSH key by name.'
|
|
44
|
-
def del(name)
|
|
45
|
-
output sdc(config(options)).keys.destroy(name), {message: "Key #{name} deleted."}.merge(options)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
class Datacenter < CLI::Base
|
|
50
|
-
desc 'ls', 'Provides a list of all datacenters this cloud is aware of.'
|
|
51
|
-
def ls
|
|
52
|
-
output sdc(config(options)).datacenters.all, {table: :v}.merge(options)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
desc 'get [NAME]', 'Gets an individual datacenter by name.'
|
|
56
|
-
def get(name)
|
|
57
|
-
output sdc(config(options)).datacenters.read(name), {table: :v}.merge(options)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
class Dataset < CLI::Base
|
|
62
|
-
desc 'ls', 'Provides a list of datasets available in this datacenter.'
|
|
63
|
-
def ls
|
|
64
|
-
include = [:id, :name, :urn, :version, :os]
|
|
65
|
-
output sdc(config(options)).datasets.all, {table: :h, include: include}.merge(options)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
desc 'get [ID]', 'Gets an individual dataset by id.'
|
|
69
|
-
def get(id)
|
|
70
|
-
output sdc(config(options)).datasets.read(id), {table: :v}.merge(options)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
class Package < CLI::Base
|
|
75
|
-
desc 'ls', 'Provides a list of packages available in this datacenter.'
|
|
76
|
-
def ls
|
|
77
|
-
output sdc(config(options)).packages.all, {table: :h}.merge(options)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
desc 'get [NAME]', 'Gets a package by name.'
|
|
81
|
-
def get(name)
|
|
82
|
-
output sdc(config(options)).packages.read(name), {table: :v}.merge(options)
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
class Tag < CLI::Base
|
|
87
|
-
class_option :uuid, type: :string, aliases: '-u', desc: 'Machine uuid'
|
|
88
|
-
|
|
89
|
-
desc 'ls', 'Returns the complete set of tags associated with this machine.'
|
|
90
|
-
def ls
|
|
91
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
92
|
-
output sdc(config(opt(ARGV, options))).machines.tags(uuid).all, {table: :v}.merge(opt(ARGV, options))
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
desc 'get [KEY]', 'Returns the value for a single tag on this machine.'
|
|
96
|
-
def get(key)
|
|
97
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
98
|
-
output sdc(config(opt(ARGV, options))).machines.tags(uuid).read(key), {'raw' => true}.merge(opt(ARGV, options))
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
desc 'set [KEY] [VALUE]', 'Allows you to set the tags for a given machine.'
|
|
102
|
-
def set(key, value)
|
|
103
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
104
|
-
output sdc(config(opt(ARGV, options))).machines.tags(uuid).create({key => value}), {table: :v}.merge(opt(ARGV, options))
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
desc 'del [KEY]', 'Deletes tag from this machine.'
|
|
108
|
-
method_option :all, type: :boolean, desc: 'All tags delete.'
|
|
109
|
-
def del(key=nil)
|
|
110
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
111
|
-
if key.nil?
|
|
112
|
-
if options.all
|
|
113
|
-
msg = "Machine #{CLI.ip(uuid)} all tags deleted."
|
|
114
|
-
output sdc(config(opt(ARGV, options))).machines.tags(uuid).destroy, {message: msg}.merge(opt(ARGV, options))
|
|
115
|
-
end
|
|
116
|
-
else
|
|
117
|
-
msg = "Machine #{CLI.ip(uuid)} tag #{key} deleted."
|
|
118
|
-
output sdc(config(opt(ARGV, options))).machines.tags(uuid).destroy(key), {message: msg}.merge(opt(ARGV, options))
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
class Meta < CLI::Base
|
|
124
|
-
class_option :uuid, type: :string, aliases: '-u', desc: 'Machine uuid'
|
|
125
|
-
|
|
126
|
-
desc 'ls', 'Returns the complete set of metadata associated with this machine.'
|
|
127
|
-
method_option :credentials, type: :boolean, aliases: '-c', desc: 'Only output the machine credentials.'
|
|
128
|
-
def ls
|
|
129
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
130
|
-
res = sdc(config(opt(ARGV, options))).machines.metadata(uuid).read(options)
|
|
131
|
-
res.content = res.content['credentials'].to_json if options.credentials
|
|
132
|
-
output res, {table: :v}.merge(opt(ARGV, options))
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
desc 'set [KEY] [VALUE]', 'Allows you to set the metadata for a given machine.'
|
|
136
|
-
def set(key, value)
|
|
137
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
138
|
-
output sdc(config(opt(ARGV, options))).machines.metadata(uuid).create({key => value}), {table: :v}.merge(opt(ARGV, options))
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
desc 'push [KEY] [FILE]', 'Push the metadata from file. (user-script or user-data)'
|
|
142
|
-
def push(key, file)
|
|
143
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
144
|
-
value = File.read(file)
|
|
145
|
-
output sdc(config(opt(ARGV, options))).machines.metadata(uuid).create({key => value}), {table: :v}.merge(opt(ARGV, options))
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
desc 'del [KEY]', 'Deletes metadata key from this machine.'
|
|
149
|
-
method_option :all, type: :boolean, desc: 'All metadata delete.'
|
|
150
|
-
def del(key=nil)
|
|
151
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
152
|
-
if key.nil?
|
|
153
|
-
if options.all
|
|
154
|
-
msg = "Machine #{CLI.ip(uuid)} all metadata deleted."
|
|
155
|
-
output sdc(config(opt(ARGV, options))).machines.metadata(uuid).destroy, {message: msg}.merge(opt(ARGV, options))
|
|
156
|
-
end
|
|
157
|
-
else
|
|
158
|
-
msg = "Machine #{CLI.ip(uuid)} metadata #{key} deleted."
|
|
159
|
-
output sdc(config(opt(ARGV, options))).machines.metadata(uuid).destroy(key), {message: msg}.merge(opt(ARGV, options))
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
class Snapshot < CLI::Base
|
|
165
|
-
class_option :uuid, type: :string, aliases: '-u', desc: 'Machine uuid'
|
|
166
|
-
|
|
167
|
-
desc 'ls', 'Lists all snapshots taken for a given machine.'
|
|
168
|
-
def ls
|
|
169
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
170
|
-
output sdc(config(opt(ARGV, options))).machines.snapshots(uuid).all, {table: :h}.merge(opt(ARGV, options))
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
desc 'get [NAME]', 'Gets the state of the named snapshot.'
|
|
174
|
-
def get(name)
|
|
175
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
176
|
-
output sdc(config(opt(ARGV, options))).machines.snapshots(uuid).read(name), {table: :v}.merge(opt(ARGV, options))
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
desc 'add [NAME]', 'Allows you to take a snapshot of a machine.'
|
|
180
|
-
def add(name)
|
|
181
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
182
|
-
output sdc(config(opt(ARGV, options))).machines.snapshots(uuid).create({name: name}), {table: :v}.merge(opt(ARGV, options))
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
desc 'del [NAME]', 'Deletes the specified snapshot of a machine.'
|
|
186
|
-
def del(name)
|
|
187
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
188
|
-
msg = "Machine #{CLI.ip(uuid)} snapshots #{name} deleted."
|
|
189
|
-
output sdc(config(opt(ARGV, options))).machines.snapshots(uuid).destroy(name), {message: msg}.merge(opt(ARGV, options))
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
desc 'start [NAME]', 'Starts a stopped machine from the referenced snapshot.'
|
|
193
|
-
def start(name)
|
|
194
|
-
uuid = options.uuid.nil? ? config[:use_machine] : options.uuid
|
|
195
|
-
msg = "Machine #{CLI.ip(uuid)} snapshots #{name} started."
|
|
196
|
-
output sdc(config(opt(ARGV, options))).machines.snapshots(uuid).start(name), {message: msg}.merge(opt(ARGV, options))
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
class Machine < CLI::Base
|
|
201
|
-
desc 'ls', 'Lists all machines on record for an account.'
|
|
202
|
-
method_option :type, type: :string, aliases: '-t', desc: 'virtualmachine or smartmachine'
|
|
203
|
-
method_option :state, type: :string, aliases: '-s', desc: 'running or stopped'
|
|
204
|
-
def ls
|
|
205
|
-
include = [:id, :dataset, :primaryIp, :state]
|
|
206
|
-
output sdc(config(options)).machines.all(options), {table: :h, include: include}.merge(options)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
desc 'get [UUID]', 'Gets the details for an individual machine.'
|
|
210
|
-
def get(uuid=nil)
|
|
211
|
-
uuid ||= config[:use_machine]
|
|
212
|
-
output sdc(config(options)).machines.read(uuid), {table: :v}.merge(options)
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
desc 'add [NAME]', 'Allows you to provision a machine.'
|
|
216
|
-
method_option :dataset, type: :string, aliases: '-e', desc: 'dataset URN; default is indicated in ListDatasets'
|
|
217
|
-
method_option :package, type: :string, aliases: '-p', desc: 'Name of the package to use on provisioning; default is indicated in ListPackages'
|
|
218
|
-
def add(name)
|
|
219
|
-
output sdc(config(options)).machines.create({name: name}.merge(options)), {table: :v}.merge(options)
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
desc 'del [UUID]', 'Allows you to completely destroy a machine.'
|
|
223
|
-
def del(uuid=nil)
|
|
224
|
-
uuid ||= config[:use_machine]
|
|
225
|
-
output sdc(config(options)).machines.destroy(uuid), {message: "Machine #{CLI.ip(uuid)} deleted."}.merge(options)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
desc 'stop [UUID]', 'Allows you to shut down a machine.'
|
|
229
|
-
method_option :all, type: :boolean, desc: 'All machine stop.'
|
|
230
|
-
def stop(uuid=nil)
|
|
231
|
-
if options.all
|
|
232
|
-
sdc(config(options)).machines.all({state: 'running'}).content.each do |machine|
|
|
233
|
-
output sdc(config(options)).machines.stop(machine['id']), {message: "Machine #{machine['primaryIp']} stoped."}.merge(options)
|
|
234
|
-
end
|
|
235
|
-
else
|
|
236
|
-
uuid ||= config[:use_machine]
|
|
237
|
-
output sdc(config(options)).machines.stop(uuid), {message: "Machine #{CLI.ip(uuid)} stoped."}.merge(options)
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
desc 'start [UUID]', 'Allows you to boot up a machine.'
|
|
242
|
-
method_option :all, type: :boolean, desc: 'All machine start.'
|
|
243
|
-
def start(uuid=nil)
|
|
244
|
-
if options.all
|
|
245
|
-
sdc(config(options)).machines.all({state: 'stopped'}).content.each do |machine|
|
|
246
|
-
output sdc(config(options)).machines.start(machine['id']), {message: "Machine #{machine['primaryIp']} started."}.merge(options)
|
|
247
|
-
end
|
|
248
|
-
else
|
|
249
|
-
uuid ||= config[:use_machine]
|
|
250
|
-
output sdc(config(options)).machines.start(uuid), {message: "Machine #{CLI.ip(uuid)} started."}.merge(options)
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
desc 'reboot [UUID]', 'Allows you to reboot a machine.'
|
|
255
|
-
def reboot(uuid=nil)
|
|
256
|
-
uuid ||= config[:use_machine]
|
|
257
|
-
output sdc(config(options)).machines.reboot(uuid), {message: "Machine #{CLI.ip(uuid)} reboot."}.merge(options)
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
desc 'resize [UUID]', 'Allows you to resize a SmartMachine.'
|
|
261
|
-
method_option :package, type: :string, aliases: '-p', desc: 'Use a package name returned from ListPackages'
|
|
262
|
-
def resize(uuid=nil)
|
|
263
|
-
uuid ||= config[:use_machine]
|
|
264
|
-
output sdc(config(options)).machines.resize(uuid, {}.merge(options)), {message: "Machine #{CLI.ip(uuid)} resize."}.merge(options)
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
desc 'use [UUID]', 'Use machine.'
|
|
268
|
-
def use(uuid=nil)
|
|
269
|
-
config = Configure.read
|
|
270
|
-
if uuid.nil?
|
|
271
|
-
puts "use #{config[:use_machine]}"
|
|
272
|
-
else
|
|
273
|
-
config[:use_machine] = uuid
|
|
274
|
-
Configure.write config
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
register(Tag, 'tag', 'tag [COMMAND]', 'Machine tag')
|
|
279
|
-
register(Meta, 'meta', 'meta [COMMAND]', 'Machine metadata')
|
|
280
|
-
register(Snapshot, 'snapshot', 'snapshot [COMMAND]', 'Machine snapshot')
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
class Analytic < CLI::Base
|
|
284
|
-
desc 'desc', 'Retrieves the schema for instrumentations.'
|
|
285
|
-
method_option :all, type: :boolean, desc: 'All describe.'
|
|
286
|
-
method_option :output, type: :string, :default => 'metrics', aliases: '-o', desc: 'Only output the modules or fields or types or metrics or transformations.'
|
|
287
|
-
def desc
|
|
288
|
-
if options['raw']
|
|
289
|
-
puts sdc(config(options)).analytics.describe.body
|
|
290
|
-
else
|
|
291
|
-
content = sdc(config(options)).analytics.describe.content
|
|
292
|
-
describe('modules', content, {cols: ['key', 'label']}.merge(options))
|
|
293
|
-
describe('fields', content, {cols: ['key', 'label', 'type']}.merge(options))
|
|
294
|
-
describe('types', content, {cols: ['key', 'name', 'arity', 'unit', 'abbr', 'base', 'power']}.merge(options))
|
|
295
|
-
describe('metrics', content, {cols: :all, exclude: [:fields]}.merge(options))
|
|
296
|
-
describe('transformations', content, {cols: ['key', 'label']}.merge(options))
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
desc 'ls', 'Retrieves all currently created instrumentations.'
|
|
301
|
-
def ls
|
|
302
|
-
include = ['id', 'module', 'stat', 'decomposition']
|
|
303
|
-
output sdc(config(options)).analytics.all, {table: :h, include: include}.merge(options)
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
desc 'get [ID]', 'Retrieves the configuration for an instrumentation.'
|
|
307
|
-
method_option :value, type: :boolean, aliases: '-v', desc: 'Analytic value.'
|
|
308
|
-
def get(id)
|
|
309
|
-
if options[:value]
|
|
310
|
-
output sdc(config(options)).analytics.value(id), {table: :v}.merge(options)
|
|
311
|
-
else
|
|
312
|
-
output sdc(config(options)).analytics.read(id), {table: :v, exclude: ['uris']}.merge(options)
|
|
313
|
-
end
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
desc 'add [NAME]', 'Creates an instrumentation.'
|
|
317
|
-
method_option :module, type: :string, aliases: '-m', desc: 'The Cloud analytics module'
|
|
318
|
-
method_option :stat, type: :string, aliases: '-s', desc: 'The Cloud analytics stat'
|
|
319
|
-
def add
|
|
320
|
-
output sdc(config(options)).analytics.create(options), {table: :v, exclude: ['uris']}.merge(options)
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
desc 'del [ID]', 'Destroys an instrumentation.'
|
|
324
|
-
def del(id)
|
|
325
|
-
output sdc(config(opt(ARGV, options))).analytics.destroy(id), {message: "Analytic #{id} deleted"}.merge(opt(ARGV, options))
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
desc 'heatmap [ID]', 'Retrieves a particular instrumentation heatmap.'
|
|
329
|
-
method_option :image, type: :boolean, aliases: '-i', desc: 'Heatmap image file.'
|
|
330
|
-
method_option :x, type: :numeric, aliases: '-x', desc: 'X-Axis'
|
|
331
|
-
method_option :y, type: :numeric, aliases: '-y', desc: 'Y-Axis'
|
|
332
|
-
def heatmap(id)
|
|
333
|
-
if options[:image]
|
|
334
|
-
output sdc(config(options)).analytics.heatmap(id).image, {table: :v, exclude: ['image', 'present']}.merge(options)
|
|
335
|
-
else
|
|
336
|
-
client = sdc(config(options))
|
|
337
|
-
content = client.analytics.heatmap(id).image.content
|
|
338
|
-
query = {'ymin' => content['ymin'], 'ymax' => content['ymax']}
|
|
339
|
-
output client.analytics.heatmap(id).details(query.merge(options)), {table: :v}.merge(options)
|
|
340
|
-
end
|
|
341
|
-
end
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
class Main < Thor
|
|
345
|
-
desc 'init', 'Sets up an account on a datacenter for use with this CLI.'
|
|
346
|
-
def init
|
|
347
|
-
message = ['Successful configuration.', 'Failed Configuration.']
|
|
348
|
-
state = 0
|
|
349
|
-
|
|
350
|
-
Configure.init
|
|
351
|
-
res = sdc(config).keys.all
|
|
352
|
-
if res.status == 200
|
|
353
|
-
rsa_path = Configure.key(res.content)
|
|
354
|
-
config = Configure.read
|
|
355
|
-
if rsa_path
|
|
356
|
-
raw = {name: config[:use_key], key: File.read(rsa_path)}
|
|
357
|
-
res = sdc(config).keys.create(raw)
|
|
358
|
-
state = 1 if res.status != 201
|
|
359
|
-
config.delete(:password)
|
|
360
|
-
else
|
|
361
|
-
config.delete(:password)
|
|
362
|
-
res = sdc(config).keys.read(config[:use_key])
|
|
363
|
-
state = 1 if res.status != 200
|
|
364
|
-
end
|
|
365
|
-
Configure.write config
|
|
366
|
-
else
|
|
367
|
-
state = 1
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
msg = res.content['message'] + '.' if state == 1
|
|
371
|
-
puts "#{message[state]} #{msg}"
|
|
372
|
-
end
|
|
373
|
-
|
|
374
|
-
register(Key, 'key', 'key [COMMAND]', 'SSH key')
|
|
375
|
-
register(Datacenter, 'datacenter', 'datacenter [COMMAND]', 'Smart Data Center')
|
|
376
|
-
register(Dataset, 'dataset', 'dataset [COMMAND]', 'Machine operating system')
|
|
377
|
-
register(Package, 'package', 'package [COMMAND]', 'Machine resources')
|
|
378
|
-
register(Machine, 'machine', 'machine [COMMAND]', 'Virtual machine')
|
|
379
|
-
register(Analytic, 'analytic', 'analytic [COMMAND]', 'DTrace analytics')
|
|
380
|
-
end
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
CLI::Main.start
|
|
7
|
+
Smartdc::Cli::Main.start
|