cloudstack-cli 0.5.4 → 0.5.5
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 +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +9 -2
- data/cloudstack-cli.gemspec +8 -7
- data/lib/cloudstack-cli/base.rb +1 -1
- data/lib/cloudstack-cli/cli.rb +13 -41
- data/lib/cloudstack-cli/commands/environment.rb +60 -10
- data/lib/cloudstack-cli/commands/network.rb +6 -7
- data/lib/cloudstack-cli/commands/volume.rb +17 -7
- data/lib/cloudstack-cli/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dfcca0f542e684213495618ed1c34536fd1490e
|
4
|
+
data.tar.gz: 9af0ffdc6f40c4894f27fccb44d71e097949664a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aba197e1259357da8ca08a17129e401ceedb00afa8b6aefea6b801c795fffc659aee9ce6dc39ddecb2f4edc5a93f7af58ef44309b865a6ef0dbe57e7a64a294
|
7
|
+
data.tar.gz: 299ac9cc95acba6dc197ca1bb0215f2930f3aff8671fef1d60b48e8ab6b0fb79a5613ae0dac7a77a8dde9ab9bfe02f14aefcbd495b0e6d6276f0af3f6b73af97
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,20 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git@github.com:niwo/cloudstack_client.git
|
3
|
+
revision: 7b28996ead63220d04b36766651d734e28383f90
|
4
|
+
branch: master
|
5
|
+
specs:
|
6
|
+
cloudstack_client (0.3.6)
|
7
|
+
|
1
8
|
PATH
|
2
9
|
remote: .
|
3
10
|
specs:
|
4
11
|
cloudstack-cli (0.5.4)
|
5
|
-
cloudstack_client (
|
12
|
+
cloudstack_client (>= 0.3.5)
|
6
13
|
thor (~> 0.18)
|
7
14
|
|
8
15
|
GEM
|
9
16
|
remote: https://rubygems.org/
|
10
17
|
specs:
|
11
|
-
cloudstack_client (0.3.4)
|
12
18
|
json (1.8.1)
|
13
19
|
rake (10.1.1)
|
14
20
|
rdoc (4.1.1)
|
@@ -20,5 +26,6 @@ PLATFORMS
|
|
20
26
|
|
21
27
|
DEPENDENCIES
|
22
28
|
cloudstack-cli!
|
29
|
+
cloudstack_client!
|
23
30
|
rake (~> 10.1)
|
24
31
|
rdoc (~> 4.1)
|
data/cloudstack-cli.gemspec
CHANGED
@@ -4,25 +4,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'cloudstack-cli/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = 'cloudstack-cli'
|
8
8
|
gem.version = CloudstackCli::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email =
|
9
|
+
gem.authors = ['Nik Wolfgramm']
|
10
|
+
gem.email = %w(nik.wolfgramm@gmail.com)
|
11
11
|
gem.description = %q{cloudstack-cli is a CloudStack API client written in Ruby.}
|
12
12
|
gem.summary = %q{cloudstack-cli CloudStack API client}
|
13
|
-
gem.
|
13
|
+
gem.date = Time.now.utc.strftime("%Y-%m-%d")
|
14
|
+
gem.homepage = 'https://github.com/niwo/cloudstack-cli'
|
14
15
|
gem.license = 'MIT'
|
15
16
|
|
16
17
|
gem.required_ruby_version = '>= 1.9.3'
|
17
18
|
gem.files = `git ls-files`.split($/)
|
18
|
-
gem.executables =
|
19
|
+
gem.executables = %w(cs)
|
19
20
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
|
-
gem.require_paths =
|
21
|
+
gem.require_paths = %w(lib)
|
21
22
|
gem.rdoc_options = %w[--line-numbers --inline-source]
|
22
23
|
|
23
24
|
gem.add_development_dependency('rdoc', '~> 4.1')
|
24
25
|
gem.add_development_dependency('rake', '~> 10.1')
|
25
26
|
|
26
27
|
gem.add_dependency('thor', '~> 0.18')
|
27
|
-
gem.add_dependency('cloudstack_client', '~> 0.3')
|
28
|
+
gem.add_dependency('cloudstack_client', '~> 0.3', '>= 0.3.6')
|
28
29
|
end
|
data/lib/cloudstack-cli/base.rb
CHANGED
@@ -30,7 +30,7 @@ module CloudstackCli
|
|
30
30
|
)
|
31
31
|
end
|
32
32
|
|
33
|
-
def load_configuration(config_file = options[:
|
33
|
+
def load_configuration(config_file = options[:config_file], env = options[:environment])
|
34
34
|
unless File.exists?(config_file)
|
35
35
|
say "Configuration file #{config_file} not found.", :red
|
36
36
|
say "Please run \'cs setup\' to create one."
|
data/lib/cloudstack-cli/cli.rb
CHANGED
@@ -3,59 +3,29 @@ module CloudstackCli
|
|
3
3
|
include Thor::Actions
|
4
4
|
|
5
5
|
package_name "cloudstack-cli"
|
6
|
-
map %w(-v --version) => :version
|
7
6
|
|
8
|
-
class_option :
|
7
|
+
class_option :config_file,
|
9
8
|
default: File.join(Dir.home, '.cloudstack-cli.yml'),
|
10
9
|
aliases: '-c',
|
11
10
|
desc: 'location of your cloudstack-cli configuration file'
|
12
11
|
|
13
|
-
class_option :
|
12
|
+
class_option :env,
|
14
13
|
aliases: '-e',
|
15
|
-
desc: 'environment to
|
14
|
+
desc: 'environment to use'
|
16
15
|
|
17
16
|
class_option :debug,
|
18
17
|
desc: 'enable debug output',
|
19
18
|
type: :boolean
|
20
19
|
|
21
|
-
desc "version", "
|
20
|
+
desc "version", "print cloudstack-cli version number"
|
22
21
|
def version
|
23
|
-
say "cloudstack-cli
|
22
|
+
say "cloudstack-cli version #{CloudstackCli::VERSION}"
|
24
23
|
end
|
24
|
+
map %w(-v --version) => :version
|
25
25
|
|
26
|
-
desc "setup", "initial
|
27
|
-
|
28
|
-
|
29
|
-
option :secret_key
|
30
|
-
def setup(file = options[:config])
|
31
|
-
config = {}
|
32
|
-
unless options[:url]
|
33
|
-
say "Configuring #{options[:environment] || 'default'} environment."
|
34
|
-
say "What's the URL of your Cloudstack API?", :yellow
|
35
|
-
say "Example: https://my-cloudstack-service/client/api/"
|
36
|
-
config[:url] = ask("URL:", :magenta)
|
37
|
-
end
|
38
|
-
unless options[:api_key]
|
39
|
-
config[:api_key] = ask("API Key:", :magenta)
|
40
|
-
end
|
41
|
-
unless options[:secret_key]
|
42
|
-
config[:secret_key] = ask("Secret Key:", :magenta)
|
43
|
-
end
|
44
|
-
if options[:environment]
|
45
|
-
config = {options[:environment] => config}
|
46
|
-
end
|
47
|
-
if File.exists? file
|
48
|
-
begin
|
49
|
-
old_config = YAML::load(IO.read(file))
|
50
|
-
rescue
|
51
|
-
error "Can't load configuration from file #{config_file}."
|
52
|
-
exit 1
|
53
|
-
end
|
54
|
-
say "Warning: #{file} already exists.", :red
|
55
|
-
exit unless yes?("Do you want to merge your settings? [y/N]", :red)
|
56
|
-
config = old_config.merge(config)
|
57
|
-
end
|
58
|
-
File.open(file, 'w+') {|f| f.write(config.to_yaml) }
|
26
|
+
desc "setup", "initial configuration of Cloudstack connection settings"
|
27
|
+
def setup
|
28
|
+
invoke "environment:add", :environment => options[:environment]
|
59
29
|
end
|
60
30
|
|
61
31
|
desc "command COMMAND [arg1=val1 arg2=val2...]", "run a custom api command"
|
@@ -72,8 +42,10 @@ module CloudstackCli
|
|
72
42
|
Dir[File.dirname(__FILE__) + '/commands/*.rb'].each do |command|
|
73
43
|
require command
|
74
44
|
end
|
75
|
-
|
76
|
-
|
45
|
+
|
46
|
+
desc "environment SUBCOMMAND ...ARGS", "Manage cloudstack-cli environments"
|
47
|
+
subcommand :environment, Environment
|
48
|
+
map 'env' => :environment
|
77
49
|
|
78
50
|
desc "zone SUBCOMMAND ...ARGS", "Manage zones"
|
79
51
|
subcommand :zone, Zone
|
@@ -1,22 +1,72 @@
|
|
1
1
|
class Environment < CloudstackCli::Base
|
2
2
|
|
3
3
|
desc "list", "list cloudstack-cli environments"
|
4
|
-
|
5
|
-
|
4
|
+
def list
|
5
|
+
config = parse_configfile(options[:config_file])
|
6
|
+
table = [%w(Name URL)]
|
7
|
+
table << ["default", config[:url]]
|
8
|
+
config.each_key do |key|
|
9
|
+
table << [key, config[key][:url]] unless key.class == Symbol
|
10
|
+
end
|
11
|
+
print_table table
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "add", "add a new Cloudstack environment"
|
15
|
+
option :url
|
16
|
+
option :api_key
|
17
|
+
option :secret_key
|
18
|
+
def add(env = options[:environment])
|
19
|
+
config = {}
|
20
|
+
unless options[:url]
|
21
|
+
say "Add a new environment (#{env || 'default'})."
|
22
|
+
say "What's the URL of your Cloudstack API?", :yellow
|
23
|
+
say "Example: https://my-cloudstack-service/client/api/", :green
|
24
|
+
config[:url] = ask("URL:", :magenta)
|
25
|
+
end
|
26
|
+
unless options[:api_key]
|
27
|
+
config[:api_key] = ask("API Key:", :magenta)
|
28
|
+
end
|
29
|
+
unless options[:secret_key]
|
30
|
+
config[:secret_key] = ask("Secret Key:", :magenta)
|
31
|
+
end
|
32
|
+
if env
|
33
|
+
config = {env => config}
|
34
|
+
end
|
35
|
+
if File.exists? options[:config_file]
|
36
|
+
old_config = parse_configfile(options[:config_file])
|
37
|
+
say "Warning: #{options[:config_file]} already exists.", :red
|
38
|
+
exit unless yes?("Do you want to merge your settings? [y/N]", :red)
|
39
|
+
config = old_config.merge(config)
|
40
|
+
end
|
41
|
+
File.open(options[:config_file], 'w+') {|f| f.write(config.to_yaml) }
|
42
|
+
say "OK, config-file written to #{options[:config_file]}.", :green
|
43
|
+
end
|
44
|
+
|
45
|
+
desc "delete", "delete a Cloudstack connection"
|
46
|
+
def delete(name)
|
47
|
+
config = parse_configfile(options[:config_file])
|
48
|
+
exit unless yes?("Do you really want delete environment #{name}? [y/N]", :red)
|
49
|
+
config.delete(name)
|
50
|
+
File.open(options[:config_file], 'w+') {|f| f.write(config.to_yaml) }
|
51
|
+
say "OK.", :green
|
52
|
+
end
|
53
|
+
|
54
|
+
no_commands do
|
55
|
+
|
56
|
+
def parse_configfile(file)
|
6
57
|
if File.exists? file
|
7
58
|
begin
|
8
|
-
|
59
|
+
return YAML::load(IO.read(file))
|
9
60
|
rescue
|
10
|
-
|
61
|
+
say "Error loading configuration from file #{file}.", :red
|
11
62
|
exit 1
|
12
63
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
table << [key, config[key][:url]] unless key.class == Symbol
|
17
|
-
end
|
18
|
-
print_table table
|
64
|
+
else
|
65
|
+
say "Can't load configuration from file #{file}.", :red
|
66
|
+
exit 1
|
19
67
|
end
|
20
68
|
end
|
21
69
|
|
70
|
+
end
|
71
|
+
|
22
72
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
class Network < CloudstackCli::Base
|
2
2
|
|
3
3
|
desc "list", "list networks"
|
4
|
-
option :project
|
5
|
-
option :account
|
6
|
-
option :zone
|
4
|
+
option :project, desc: 'the project name of the network'
|
5
|
+
option :account, desc: 'the owner of the network'
|
6
|
+
option :zone, desc: 'typehe name of the zone the network belongs to'
|
7
7
|
option :type, desc: 'the type of the network'
|
8
|
-
option :showid, type: :boolean
|
9
|
-
option :isdefault, type: :boolean
|
8
|
+
option :showid, type: :boolean, desc: 'show the network id'
|
10
9
|
def list
|
11
10
|
project = find_project if options[:project]
|
12
11
|
if options[:zone]
|
@@ -23,8 +22,8 @@ class Network < CloudstackCli::Base
|
|
23
22
|
elsif options[:account]
|
24
23
|
networks = client.list_networks(account: options[:account], zone_id: zone_id)
|
25
24
|
else
|
26
|
-
networks = client.list_networks(
|
27
|
-
networks += client.list_networks(project_id: -1,
|
25
|
+
networks = client.list_networks(zone_id: zone_id)
|
26
|
+
networks += client.list_networks(project_id: -1, zone_id: zone_id)
|
28
27
|
end
|
29
28
|
|
30
29
|
if options[:type]
|
@@ -1,19 +1,29 @@
|
|
1
1
|
class Volume < CloudstackCli::Base
|
2
2
|
|
3
3
|
desc "list", "list volumes"
|
4
|
-
option :project
|
4
|
+
option :project, desc: 'list resources by project'
|
5
|
+
option :account, desc: 'list resources by account'
|
6
|
+
option :keyword, desc: 'list by keyword'
|
7
|
+
option :name, desc: 'name of the disk volume'
|
8
|
+
option :type, desc: 'type of disk volume (ROOT or DATADISK)'
|
5
9
|
def list
|
6
|
-
|
7
|
-
|
10
|
+
if options[:project]
|
11
|
+
projectid = find_project['id']
|
12
|
+
options[:project_id] = projectid if projectid
|
13
|
+
end
|
14
|
+
volumes = client.list_volumes(options)
|
8
15
|
if volumes.size < 1
|
9
|
-
|
16
|
+
say "No volumes found."
|
10
17
|
else
|
11
|
-
table = [
|
18
|
+
table = [%w(Name Type Size VM Storage Offeringname)]
|
12
19
|
volumes.each do |volume|
|
13
|
-
table << [
|
20
|
+
table << [
|
21
|
+
volume['name'], volume['type'],
|
14
22
|
(volume['size'] / 1024**3).to_s + 'GB',
|
15
23
|
volume['vmname'],
|
16
|
-
volume['storage'],
|
24
|
+
volume['storage'],
|
25
|
+
volume['diskofferingname']
|
26
|
+
]
|
17
27
|
end
|
18
28
|
print_table(table)
|
19
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudstack-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nik Wolfgramm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -59,6 +59,9 @@ dependencies:
|
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0.3'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 0.3.6
|
62
65
|
type: :runtime
|
63
66
|
prerelease: false
|
64
67
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -66,6 +69,9 @@ dependencies:
|
|
66
69
|
- - "~>"
|
67
70
|
- !ruby/object:Gem::Version
|
68
71
|
version: '0.3'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.3.6
|
69
75
|
description: cloudstack-cli is a CloudStack API client written in Ruby.
|
70
76
|
email:
|
71
77
|
- nik.wolfgramm@gmail.com
|