smartdc 1.3.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/smartdc/cli.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'cassette-rack/response/raise_error'
|
3
|
+
require 'smartdc/cli_helper'
|
4
|
+
require 'smartdc/cli_configure'
|
5
|
+
require 'smartdc/cli/datacenter'
|
6
|
+
require 'smartdc/cli/image'
|
7
|
+
require 'smartdc/cli/package'
|
8
|
+
require 'smartdc/cli/key'
|
9
|
+
require 'smartdc/cli/machine'
|
10
|
+
require 'smartdc/cli/analytic'
|
11
|
+
|
12
|
+
module Smartdc
|
13
|
+
module Cli
|
14
|
+
class Main < Thor
|
15
|
+
namespace 'sdc'
|
16
|
+
class_option :raw, type: :boolean, aliases: '-r', desc: 'Response body of raw.'
|
17
|
+
|
18
|
+
map '-v' => :version
|
19
|
+
desc 'version', 'Prints current version.'
|
20
|
+
def version
|
21
|
+
puts "sdc #{Smartdc::VERSION}"
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'init', 'Sets up configuration for use with this CLI.'
|
25
|
+
def init
|
26
|
+
clicfg = Smartdc::CliConfigure.new
|
27
|
+
clicfg.init
|
28
|
+
Smartdc::Cli.setup
|
29
|
+
Smartdc.keys
|
30
|
+
puts 'Successful configuration.'
|
31
|
+
rescue
|
32
|
+
puts 'Failed Configuration.'
|
33
|
+
end
|
34
|
+
|
35
|
+
cmd = ' [COMMAND]'
|
36
|
+
register(Smartdc::Cli::Datacenter, 'datacenter', 'datacenter' + cmd, 'Smart datacenters')
|
37
|
+
register(Smartdc::Cli::Image, 'image', 'image' + cmd, 'Machine images')
|
38
|
+
register(Smartdc::Cli::Package, 'package', 'package' + cmd, 'Machine resources')
|
39
|
+
register(Smartdc::Cli::Key, 'key', 'key' + cmd, 'SSH key')
|
40
|
+
register(Smartdc::Cli::Machine, 'machine', 'machine' + cmd, 'Virtual machine')
|
41
|
+
register(Smartdc::Cli::Analytic, 'analytic', 'analytic' + cmd, 'DTrace analytics')
|
42
|
+
end
|
43
|
+
|
44
|
+
class << self
|
45
|
+
def setup
|
46
|
+
clicfg = Smartdc::CliConfigure.new
|
47
|
+
sdccfg = clicfg.read
|
48
|
+
Smartdc.configure do |config|
|
49
|
+
config.url = "https://#{sdccfg[:hostname]}" if sdccfg.key?(:hostname)
|
50
|
+
config.version = sdccfg[:version] if sdccfg.key?(:version)
|
51
|
+
config.username = sdccfg[:username] if sdccfg.key?(:username)
|
52
|
+
config.use_key = sdccfg[:use_key] if sdccfg.key?(:use_key)
|
53
|
+
config.rsa_path = sdccfg[:rsa_path] if sdccfg.key?(:rsa_path)
|
54
|
+
config.middleware = Faraday::RackBuilder.new do |builder|
|
55
|
+
builder.adapter Faraday.default_adapter
|
56
|
+
#builder.use CassetteRack::Response::RaiseError
|
57
|
+
#builder.response :logger
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
Smartdc::Cli.setup
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class Analytic < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
desc 'desc', 'Retrieves the schema for instrumentations.'
|
6
|
+
method_option :all, type: :boolean, desc: 'All describe.'
|
7
|
+
method_option :output, type: :string, default: 'metrics', aliases: '-o',
|
8
|
+
desc: 'Only output the modules or fields or types or metrics or transformations.'
|
9
|
+
def desc
|
10
|
+
if options['raw']
|
11
|
+
puts Smartdc.describe_analytics.body
|
12
|
+
else
|
13
|
+
content = Smartdc.describe_analytics.content
|
14
|
+
describe('modules', content, options.merge(cols: %w[key label]))
|
15
|
+
describe('fields', content, options.merge(cols: %w[key label type]))
|
16
|
+
describe('types', content, options.merge(cols: %w[key name arity unit abbr base power]))
|
17
|
+
describe('metrics', content, options.merge(cols: :all, exclude: %i[fields]))
|
18
|
+
describe('transformations', content, options.merge(cols: %w[key label]))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'list', 'Retrieves all currently created instrumentations.'
|
23
|
+
def list
|
24
|
+
output Smartdc.analytics, options.merge(table: :horizontal, include: %i[
|
25
|
+
id module stat decomposition
|
26
|
+
])
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'show [ID]', 'Retrieves the configuration for an instrumentation.'
|
30
|
+
method_option :value, type: :boolean, aliases: '-v', desc: 'Analytic value.'
|
31
|
+
def show(id)
|
32
|
+
if options[:value]
|
33
|
+
output Smartdc.value_analytic(id), options.merge({table: :vertical})
|
34
|
+
else
|
35
|
+
output Smartdc.analytic(id), options.merge(table: :vertical, exclude: %i[uris])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
desc 'add [NAME]', 'Creates an instrumentation.'
|
40
|
+
method_option :module, type: :string, aliases: '-m', desc: 'The Cloud analytics module'
|
41
|
+
method_option :stat, type: :string, aliases: '-s', desc: 'The Cloud analytics stat'
|
42
|
+
def add
|
43
|
+
body = {module: options[:module], stat: options[:stat]}
|
44
|
+
output Smartdc.create_analytic(body), options.merge(table: :vertical, exclude: %i[uris])
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'destroy [ID]', 'Destroys an instrumentation.'
|
48
|
+
def destroy(id)
|
49
|
+
output Smartdc.destroy_analytic(id), options.merge(message: "Analytic #{id} destroy.")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class Datacenter < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
desc 'list', 'Provides a list of all datacenters this cloud is aware of.'
|
6
|
+
def list
|
7
|
+
output Smartdc.datacenters, options.merge(table: :vertical)
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'show [NAME]', 'Gets an individual datacenter by name.'
|
11
|
+
def show(name)
|
12
|
+
output Smartdc.datacenter(name)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class Image < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
desc 'list', 'Provides a list of images available in this datacenter.'
|
6
|
+
def list
|
7
|
+
output Smartdc.images, options.merge(table: :horizontal, include: %i[
|
8
|
+
id name version type os
|
9
|
+
])
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'show [ID]', 'Gets an individual image by id.'
|
13
|
+
def show(id)
|
14
|
+
output Smartdc.image(id), options.merge(table: :vertical, exclude: %i[
|
15
|
+
description files
|
16
|
+
])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class Key < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
desc 'list', 'Lists all public keys we have on record for the specified account.'
|
6
|
+
def list
|
7
|
+
output Smartdc.keys, options.merge(table: :horizontal, exclude: %i[key])
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'show [NAME]', 'Retrieves the record for an individual key.'
|
11
|
+
def show(name)
|
12
|
+
output Smartdc.key(name), options.merge(only: :key)
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'add [NAME] [FILE]', 'Uploads a new OpenSSH key.'
|
16
|
+
def add(name, file)
|
17
|
+
body = { name: name, key: File.read(file) }
|
18
|
+
output Smartdc.create_key(body), options.merge(table: :vertical, exclude: %i[key])
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'destroy [NAME]', 'Deletes a single SSH key, by name or fingerprint.'
|
22
|
+
def destroy(name)
|
23
|
+
output Smartdc.destroy_key(name), options.merge(message: "Key #{name} destroy.")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'smartdc/cli/machine/tag'
|
2
|
+
require 'smartdc/cli/machine/metadata'
|
3
|
+
require 'smartdc/cli/machine/snapshot'
|
4
|
+
|
5
|
+
module Smartdc::Cli
|
6
|
+
class Machine < Thor
|
7
|
+
include Smartdc::CliHelper
|
8
|
+
|
9
|
+
desc 'list', 'Lists all machines we have on record for your account.'
|
10
|
+
method_option :type, type: :string, aliases: '-t', desc: 'virtualmachine or smartmachine'
|
11
|
+
method_option :state, type: :string, aliases: '-s', desc: 'running or stopped'
|
12
|
+
def list
|
13
|
+
output Smartdc.machines(options), options.merge(table: :horizontal, include: %i[
|
14
|
+
id name state primaryIp memory disk dataset
|
15
|
+
])
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'show [ID]', 'Gets the details for an individual machine.'
|
19
|
+
def show(id=nil)
|
20
|
+
output Smartdc.machine(use_machine(id)), options.merge(table: :vertical)
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'add [NAME]', 'Allows you to provision a machine.'
|
24
|
+
method_option :image, type: :string, aliases: '-i', desc: 'The image UUID'
|
25
|
+
method_option :package, type: :string, aliases: '-p', desc: 'Id of the package to use on provisioning'
|
26
|
+
def add(name)
|
27
|
+
body = {name: name}.merge(options)
|
28
|
+
output Smartdc.create_machine(body), options.merge({table: :vertical})
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'destroy [ID]', 'Allows you to completely destroy a machine.'
|
32
|
+
def destroy(id=nil)
|
33
|
+
id = use_machine(id)
|
34
|
+
output Smartdc.destroy_machine(id), options.merge(message: "Destroy [#{id}] of machine.")
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'stop [ID]', 'Allows you to shut down a machine.'
|
38
|
+
def stop(id=nil)
|
39
|
+
id = use_machine(id)
|
40
|
+
output Smartdc.stop_machine(id), options.merge(message: "Stop [#{id}] of machine.")
|
41
|
+
end
|
42
|
+
|
43
|
+
desc 'start [ID]', 'Allows you to boot up a machine.'
|
44
|
+
def start(id=nil)
|
45
|
+
id = use_machine(id)
|
46
|
+
output Smartdc.start_machine(id), options.merge(message: "Start [#{id}] of machine.")
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'reboot [ID]', 'Allows you to reboot a machine'
|
50
|
+
def reboot(id=nil)
|
51
|
+
id = use_machine(id)
|
52
|
+
output Smartdc.reboot_machine(id), options.merge(message: "Reboot [#{id}] of machine.")
|
53
|
+
end
|
54
|
+
|
55
|
+
desc 'resize [ID]', 'Resize a machine to a new package.'
|
56
|
+
method_option :package, type: :string, aliases: '-p', desc: 'A package id, as returned from ListPackages'
|
57
|
+
def resize(id=nil)
|
58
|
+
body = {package: options[:package]}
|
59
|
+
id = use_machine(id)
|
60
|
+
output Smartdc.resize_machine(id, body), options.merge(message: "Resize [#{id}] of machine.")
|
61
|
+
end
|
62
|
+
|
63
|
+
desc 'use [ID]', 'Sets use machine.'
|
64
|
+
def use(id=nil)
|
65
|
+
clicfg = Smartdc::CliConfigure.new
|
66
|
+
sdccfg = clicfg.read
|
67
|
+
if id.nil?
|
68
|
+
puts "Use [#{sdccfg[:use_machine]}] of machine."
|
69
|
+
else
|
70
|
+
sdccfg[:use_machine] = id
|
71
|
+
clicfg.write(sdccfg)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
register(Smartdc::Cli::MachineTag, 'tag', 'tag [COMMAND]', 'Machine tag')
|
76
|
+
register(Smartdc::Cli::MachineMetadata, 'meta', 'meta [COMMAND]', 'Machine metadata')
|
77
|
+
register(Smartdc::Cli::MachineSnapshot, 'snapshot', 'snapshot [COMMAND]', 'Machine snapshot')
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class MachineMetadata < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
namespace 'machine meta'
|
6
|
+
class_option :id, type: :string, aliases: '-m', desc: 'Machine id'
|
7
|
+
|
8
|
+
desc 'list', 'Returns the complete set of metadata associated with this machine.'
|
9
|
+
def list
|
10
|
+
id = use_machine(options['id'])
|
11
|
+
output Smartdc.machine_metadata(id), options.merge(table: :vertical, exclude: %i[
|
12
|
+
root_authorized_keys
|
13
|
+
])
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'update [KEY] [VALUE]', 'Allows you to update the metadata for a given machine.'
|
17
|
+
def update(key, value)
|
18
|
+
id = use_machine(options['id'])
|
19
|
+
output Smartdc.update_machine_metadata(id, {key => value}), options.merge(table: :vertical, exclude: %i[
|
20
|
+
root_authorized_keys
|
21
|
+
])
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'destroy [KEY]', 'Deletes a single metadata key from this machine.'
|
25
|
+
def destroy(key)
|
26
|
+
id = use_machine(options['id'])
|
27
|
+
output Smartdc.destroy_machine_metadata(id, key), options.merge(message: "Destroy [#{key}] of machine metadata.")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class MachineSnapshot < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
namespace 'machine snapshot'
|
6
|
+
class_option :id, type: :string, aliases: '-m', desc: 'Machine id'
|
7
|
+
|
8
|
+
desc 'list', 'Lists all snapshots taken for a given machine. '
|
9
|
+
def list
|
10
|
+
id = use_machine(options['id'])
|
11
|
+
output Smartdc.machine_snapshots(id), options.merge(table: :horizontal)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'show [NAME]', 'Gets the state of the named snapshot.'
|
15
|
+
def show(name)
|
16
|
+
id = use_machine(options['id'])
|
17
|
+
output Smartdc.machine_snapshot(id, name), options.merge(table: :vertical)
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'add [NAME]', 'Allows you to take a snapshot of a machine.'
|
21
|
+
def add(name)
|
22
|
+
id = use_machine(options['id'])
|
23
|
+
output Smartdc.create_machine_snapshot(id, {name: name}), options.merge(table: :vertical)
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'destroy [NAME]', 'Deletes the specified snapshot of a machine.'
|
27
|
+
def destroy(name)
|
28
|
+
id = use_machine(options['id'])
|
29
|
+
output Smartdc.destroy_machine_snapshot(id, name), options.merge(message: "Destroy [#{name}] of machine snapshot.")
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'start [NAME]', 'Starts a stopped machine from the referenced snapshot.'
|
33
|
+
def start(name)
|
34
|
+
id = use_machine(options['id'])
|
35
|
+
output Smartdc.start_machine_snapshot(id, name), options.merge(message: "Start [#{name}] of machine snapshot.")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class MachineTag < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
namespace 'machine tag'
|
6
|
+
class_option :id, type: :string, aliases: '-m', desc: 'Machine id'
|
7
|
+
|
8
|
+
desc 'list', 'Returns the complete set of tags associated with this machine.'
|
9
|
+
def list
|
10
|
+
id = use_machine(options['id'])
|
11
|
+
output Smartdc.machine_tags(id), options.merge(table: :vertical)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'show [KEY]', 'Returns the value for a single tag on this machine.'
|
15
|
+
def show(key)
|
16
|
+
id = use_machine(options['id'])
|
17
|
+
response = Smartdc.machine_tag(id, key)
|
18
|
+
output response, options.merge(message: response.content)
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'add [KEY] [VALUE]', 'Allows you to add additional tags, other than those set at provisioning time.'
|
22
|
+
def add(key, value)
|
23
|
+
id = use_machine(options['id'])
|
24
|
+
output Smartdc.create_machine_tag(id, {key => value}), options.merge(table: :vertical)
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'destroy [KEY]', 'Deletes a single tag from this machine.'
|
28
|
+
def destroy(key)
|
29
|
+
id = use_machine(options['id'])
|
30
|
+
output Smartdc.destroy_machine_tag(id, key), options.merge(message: "Destroy [#{key}] of machine tag.")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Smartdc::Cli
|
2
|
+
class Package < Thor
|
3
|
+
include Smartdc::CliHelper
|
4
|
+
|
5
|
+
desc 'list', 'Provides a list of packages available in this datacenter.'
|
6
|
+
def list
|
7
|
+
output Smartdc.packages, options.merge(table: :horizontal, include: %i[
|
8
|
+
id name version memory disk vcpus group
|
9
|
+
])
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'show [NAME]', 'Gets a package by name or id.'
|
13
|
+
def show(name)
|
14
|
+
output Smartdc.package(name), options.merge(table: :vertical)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Smartdc
|
2
|
+
class CliConfigure
|
3
|
+
attr_reader :path
|
4
|
+
|
5
|
+
def initialize(path=nil)
|
6
|
+
if path
|
7
|
+
@path =path
|
8
|
+
else
|
9
|
+
[Smartdc.root, ENV['HOME']].each do |path|
|
10
|
+
@path = File.join(path, '.sdccfg')
|
11
|
+
break if File.exist?(@path)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def read
|
17
|
+
begin
|
18
|
+
options = {}
|
19
|
+
File.open(path, 'r') do |file|
|
20
|
+
file.each do |row|
|
21
|
+
row.chomp!
|
22
|
+
cols = row.split(/\s+=\s+/)
|
23
|
+
options[cols[0].to_sym] = cols[1]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
options
|
27
|
+
rescue
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def write(options)
|
33
|
+
File.open(path, 'w') do |file|
|
34
|
+
options.each do |key, value|
|
35
|
+
file.puts "#{key} = #{value}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
options
|
39
|
+
end
|
40
|
+
|
41
|
+
def init
|
42
|
+
output = <<__EOS__
|
43
|
+
.
|
44
|
+
|
|
45
|
+
.-. .--. .-.| .-.
|
46
|
+
: + : `--.( | (
|
47
|
+
`-' `--' `-'`- `-'
|
48
|
+
Smart Data Center Command Line Interface
|
49
|
+
https://apidocs.joyent.com/sdcapidoc/cloudapi/
|
50
|
+
__EOS__
|
51
|
+
puts output
|
52
|
+
puts
|
53
|
+
|
54
|
+
options = self.read
|
55
|
+
options = option(options, :Hostname, :hostname, 'api.example.com')
|
56
|
+
options = option(options, :Version, :version, '~7.0')
|
57
|
+
options = option(options, :Username, :username, ENV['USER'])
|
58
|
+
options = option(options, :Fingerprint, :use_key, 'none')
|
59
|
+
|
60
|
+
puts
|
61
|
+
puts "New settings!"
|
62
|
+
puts "Hostname: #{options[:hostname]}"
|
63
|
+
puts "Version: #{options[:version]}"
|
64
|
+
puts "Username: #{options[:username]}"
|
65
|
+
puts "Fingerprint: #{options[:use_key]}"
|
66
|
+
puts
|
67
|
+
|
68
|
+
self.write options
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def option(options, name, key, value)
|
73
|
+
options[key] ||= value
|
74
|
+
print "#{name} (#{options[key]}): "
|
75
|
+
stdin = STDIN.gets.chomp.to_s
|
76
|
+
options[key] = stdin if !stdin.empty?
|
77
|
+
options
|
78
|
+
end
|
79
|
+
# end private
|
80
|
+
end
|
81
|
+
end
|