cloudstack-cli 0.3.7 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/cloudstack-cli/base.rb +1 -1
- data/lib/cloudstack-cli/cli.rb +7 -0
- data/lib/cloudstack-cli/commands/host.rb +20 -0
- data/lib/cloudstack-cli/commands/iso.rb +3 -3
- data/lib/cloudstack-cli/commands/network.rb +39 -3
- data/lib/cloudstack-cli/commands/project.rb +13 -0
- data/lib/cloudstack-cli/commands/server.rb +2 -2
- data/lib/cloudstack-cli/commands/template.rb +2 -2
- data/lib/cloudstack-cli/version.rb +1 -1
- data/lib/cloudstack-client/client.rb +14 -0
- data/lib/cloudstack-client/commands/host.rb +28 -0
- data/lib/cloudstack-client/commands/iso.rb +1 -1
- data/lib/cloudstack-client/commands/network.rb +13 -0
- data/lib/cloudstack-client/version.rb +1 -1
- metadata +4 -2
data/Gemfile.lock
CHANGED
data/lib/cloudstack-cli/base.rb
CHANGED
data/lib/cloudstack-cli/cli.rb
CHANGED
@@ -14,6 +14,10 @@ module CloudstackCli
|
|
14
14
|
aliases: '-e',
|
15
15
|
desc: 'environment to load from the configuration file'
|
16
16
|
|
17
|
+
class_option :debug,
|
18
|
+
desc: 'enable debug output',
|
19
|
+
type: :boolean
|
20
|
+
|
17
21
|
desc "version", "outputs the cloudstack-cli version"
|
18
22
|
def version
|
19
23
|
say "cloudstack-cli v#{CloudstackCli::VERSION}"
|
@@ -78,6 +82,9 @@ module CloudstackCli
|
|
78
82
|
desc "cluster SUBCOMMAND ...ARGS", "List clusters"
|
79
83
|
subcommand "cluster", Cluster
|
80
84
|
|
85
|
+
desc "host SUBCOMMAND ...ARGS", "List hosts"
|
86
|
+
subcommand "host", Host
|
87
|
+
|
81
88
|
desc "project SUBCOMMAND ...ARGS", "Manage servers"
|
82
89
|
subcommand "project", Project
|
83
90
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Host < CloudstackCli::Base
|
2
|
+
|
3
|
+
desc 'list', 'list hosts'
|
4
|
+
option :zone
|
5
|
+
def list
|
6
|
+
hosts = client.list_hosts(options)
|
7
|
+
if hosts.size < 1
|
8
|
+
say "No hosts found."
|
9
|
+
else
|
10
|
+
table = [["Zone", "Type", "Cluster", "Name"]]
|
11
|
+
hosts.each do |host|
|
12
|
+
table << [
|
13
|
+
host['zonename'], host['type'], host['clustername'], host['name']
|
14
|
+
]
|
15
|
+
end
|
16
|
+
print_table table
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
1
|
class Iso < CloudstackCli::Base
|
2
2
|
|
3
|
-
desc 'list [TYPE]', "list iso's by type [featured|self|self-executable|executable|community]"
|
3
|
+
desc 'list [TYPE]', "list iso's by type [featured|self|self-executable|executable|community], default is featured"
|
4
4
|
option :project
|
5
5
|
option :zone
|
6
6
|
option :account
|
7
7
|
option :listall
|
8
8
|
def list(type='featured')
|
9
9
|
project = find_project if options[:project]
|
10
|
-
unless %w(featured self self-executable executable community).include?
|
10
|
+
unless %w(featured self self-executable executable community).include?(type)
|
11
11
|
say "unsupported iso type '#{type}'", :red
|
12
12
|
exit 1
|
13
13
|
end
|
14
14
|
zone = client.get_zone(options[:zone]) if options[:zone]
|
15
15
|
isos = client.list_isos(
|
16
|
-
|
16
|
+
filter: type,
|
17
17
|
project_id: project ? project['id'] : nil,
|
18
18
|
zone_id: zone ? zone['id'] : nil
|
19
19
|
)
|
@@ -20,6 +20,27 @@ class Network < CloudstackCli::Base
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
desc "show NAME", "show detailed infos about a network"
|
24
|
+
option :project
|
25
|
+
def show(name)
|
26
|
+
if options[:project]
|
27
|
+
if options[:project].downcase == "all"
|
28
|
+
options[:project_id] = -1
|
29
|
+
else
|
30
|
+
project = find_project
|
31
|
+
options[:project_id] = project['id']
|
32
|
+
end
|
33
|
+
end
|
34
|
+
unless server = client.get_network(name, options[:project_id])
|
35
|
+
puts "No network found."
|
36
|
+
else
|
37
|
+
server.each do |key, value|
|
38
|
+
say "#{key}: ", :yellow
|
39
|
+
say "#{value}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
23
44
|
desc "list", "list networks"
|
24
45
|
option :project
|
25
46
|
option :account
|
@@ -58,14 +79,29 @@ class Network < CloudstackCli::Base
|
|
58
79
|
end
|
59
80
|
end
|
60
81
|
|
82
|
+
desc "restart NAME", "restart network"
|
83
|
+
option :cleanup, type: :boolean, default: true
|
84
|
+
def restart(name)
|
85
|
+
network = client.get_network(name)
|
86
|
+
network = client.get_network(name, -1) unless network
|
87
|
+
unless network
|
88
|
+
say "Network #{name} not found."
|
89
|
+
exit 1
|
90
|
+
end
|
91
|
+
if yes? "Restart network \"#{network['name']}\" (cleanup=#{options[:cleanup]})?"
|
92
|
+
p client.restart_network(network['id'], options[:cleanup])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
61
96
|
desc "delete NAME", "delete network"
|
62
97
|
def delete(name)
|
63
|
-
network = client.get_network(name
|
98
|
+
network = client.get_network(name)
|
99
|
+
network = client.get_network(name, -1) unless network
|
64
100
|
unless network
|
65
|
-
say "Network #{name} not found."
|
101
|
+
say "Network \"#{name}\" not found."
|
66
102
|
exit 1
|
67
103
|
end
|
68
|
-
if yes? "Destroy network #{network['name']}
|
104
|
+
if yes? "Destroy network \"#{network['name']}\"?"
|
69
105
|
p client.delete_network(network['id'])
|
70
106
|
end
|
71
107
|
end
|
@@ -1,5 +1,18 @@
|
|
1
1
|
class Project < CloudstackCli::Base
|
2
2
|
|
3
|
+
desc "show NAME", "show detailed infos about a project"
|
4
|
+
option :project
|
5
|
+
def show(name)
|
6
|
+
unless project = client.get_project(name)
|
7
|
+
puts "No project with name #{name} found."
|
8
|
+
else
|
9
|
+
project.each do |key, value|
|
10
|
+
say "#{key}: ", :yellow
|
11
|
+
say "#{value}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
3
16
|
desc "list", "list projects"
|
4
17
|
def list
|
5
18
|
projects = client.list_projects
|
@@ -31,9 +31,9 @@ class Server < CloudstackCli::Base
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
desc "
|
34
|
+
desc "show NAME", "show detailed infos about a server"
|
35
35
|
option :project
|
36
|
-
def
|
36
|
+
def show(name)
|
37
37
|
if options[:project]
|
38
38
|
if options[:project].downcase == "all"
|
39
39
|
options[:project_id] = -1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Template < CloudstackCli::Base
|
2
2
|
|
3
|
-
desc 'list [TYPE]', 'list templates by type [featured|self|self-executable|executable|community]'
|
3
|
+
desc 'list [TYPE]', 'list templates by type [featured|self|self-executable|executable|community], default is featured'
|
4
4
|
option :project
|
5
5
|
option :zone
|
6
6
|
def list(type='featured')
|
@@ -11,7 +11,7 @@ class Template < CloudstackCli::Base
|
|
11
11
|
end
|
12
12
|
zone = client.get_zone(options[:zone]) if options[:zone]
|
13
13
|
templates = client.list_templates(
|
14
|
-
|
14
|
+
filter: type,
|
15
15
|
project_id: project ? project['id'] : nil,
|
16
16
|
zone_id: zone ? zone['id'] : nil
|
17
17
|
)
|
@@ -28,6 +28,7 @@ module CloudstackClient
|
|
28
28
|
@secret_key = secret_key
|
29
29
|
@use_ssl = api_url.start_with? "https"
|
30
30
|
@verbose = opts[:quiet] ? false : true
|
31
|
+
@debug = opts[:debug] ? true : false
|
31
32
|
end
|
32
33
|
|
33
34
|
##
|
@@ -44,6 +45,9 @@ module CloudstackClient
|
|
44
45
|
params.sort.each { |elem|
|
45
46
|
params_arr << elem[0].to_s + '=' + CGI.escape(elem[1].to_s).gsub('+', '%20').gsub(' ','%20')
|
46
47
|
}
|
48
|
+
|
49
|
+
debug_output JSON.pretty_generate(params) if @debug
|
50
|
+
|
47
51
|
data = params_arr.join('&')
|
48
52
|
signature = OpenSSL::HMAC.digest('sha1', @secret_key, data.downcase)
|
49
53
|
signature = Base64.encode64(signature).chomp
|
@@ -118,5 +122,15 @@ module CloudstackClient
|
|
118
122
|
exit 1
|
119
123
|
end
|
120
124
|
|
125
|
+
private
|
126
|
+
|
127
|
+
def debug_output(output, seperator = '-' * 80)
|
128
|
+
puts
|
129
|
+
puts seperator
|
130
|
+
puts output
|
131
|
+
puts seperator
|
132
|
+
puts
|
133
|
+
end
|
134
|
+
|
121
135
|
end # class
|
122
136
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CloudstackClient
|
2
|
+
|
3
|
+
module Host
|
4
|
+
|
5
|
+
##
|
6
|
+
# Lists hosts.
|
7
|
+
|
8
|
+
def list_hosts(args = {})
|
9
|
+
params = {
|
10
|
+
'command' => 'listHosts'
|
11
|
+
}
|
12
|
+
|
13
|
+
if args[:zone]
|
14
|
+
zone = get_zone(args[:zone])
|
15
|
+
unless zone
|
16
|
+
puts "Error: zone #{args[:project]} not found."
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
params['zoneid'] = zone['id']
|
20
|
+
end
|
21
|
+
|
22
|
+
json = send_request(params)
|
23
|
+
json['host'] || []
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -17,7 +17,7 @@ module CloudstackClient
|
|
17
17
|
filter = args[:filter] || 'featured'
|
18
18
|
params = {
|
19
19
|
'command' => 'listIsos',
|
20
|
-
'
|
20
|
+
'isofilter' => filter
|
21
21
|
}
|
22
22
|
params['projectid'] = args[:project_id] if args[:project_id]
|
23
23
|
params['zoneid'] = args[:zone_id] if args[:zone_id]
|
@@ -99,6 +99,19 @@ module CloudstackClient
|
|
99
99
|
json['network']
|
100
100
|
end
|
101
101
|
|
102
|
+
##
|
103
|
+
# Restart network.
|
104
|
+
|
105
|
+
def restart_network(id, cleanup = false)
|
106
|
+
params = {
|
107
|
+
'command' => 'restartNetwork',
|
108
|
+
'id' => id,
|
109
|
+
'cleanup' => cleanup,
|
110
|
+
}
|
111
|
+
p json = send_async_request(params)
|
112
|
+
json['network']
|
113
|
+
end
|
114
|
+
|
102
115
|
##
|
103
116
|
# Lists all physical networks.
|
104
117
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudstack-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- lib/cloudstack-cli/commands/cluster.rb
|
82
82
|
- lib/cloudstack-cli/commands/disk_offering.rb
|
83
83
|
- lib/cloudstack-cli/commands/domain.rb
|
84
|
+
- lib/cloudstack-cli/commands/host.rb
|
84
85
|
- lib/cloudstack-cli/commands/ip_address.rb
|
85
86
|
- lib/cloudstack-cli/commands/iso.rb
|
86
87
|
- lib/cloudstack-cli/commands/job.rb
|
@@ -108,6 +109,7 @@ files:
|
|
108
109
|
- lib/cloudstack-client/commands/cluster.rb
|
109
110
|
- lib/cloudstack-client/commands/disk_offering.rb
|
110
111
|
- lib/cloudstack-client/commands/domain.rb
|
112
|
+
- lib/cloudstack-client/commands/host.rb
|
111
113
|
- lib/cloudstack-client/commands/ip_address.rb
|
112
114
|
- lib/cloudstack-client/commands/iso.rb
|
113
115
|
- lib/cloudstack-client/commands/job.rb
|