cloudstack-cli 0.1.0 → 0.1.1
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.
- data/Gemfile.lock +1 -1
- data/lib/cloudstack-cli/base.rb +1 -2
- data/lib/cloudstack-cli/cli.rb +3 -0
- data/lib/cloudstack-cli/commands/network.rb +23 -33
- data/lib/cloudstack-cli/commands/physical_network.rb +24 -0
- data/lib/cloudstack-cli/commands/server.rb +25 -6
- data/lib/cloudstack-cli/commands/stack.rb +8 -2
- data/lib/cloudstack-cli/version.rb +1 -1
- data/lib/cloudstack-client/client.rb +26 -3
- data/lib/cloudstack-client/helper.rb +2 -2
- data/test/stack_example.json +29 -0
- metadata +6 -3
data/Gemfile.lock
CHANGED
data/lib/cloudstack-cli/base.rb
CHANGED
data/lib/cloudstack-cli/cli.rb
CHANGED
@@ -68,6 +68,9 @@ module CloudstackCli
|
|
68
68
|
desc "network SUBCOMMAND ...ARGS", "Manage networks"
|
69
69
|
subcommand "network", Network
|
70
70
|
|
71
|
+
desc "physicalnetwork SUBCOMMAND ...ARGS", "Manage physical networks"
|
72
|
+
subcommand "physicalnetwork", PhysicalNetwork
|
73
|
+
|
71
74
|
desc "lb SUBCOMMAND ...ARGS", "Manage load balancing rules"
|
72
75
|
subcommand "lb", Lb
|
73
76
|
|
@@ -7,43 +7,33 @@ class Network < CloudstackCli::Base
|
|
7
7
|
|
8
8
|
desc "list", "list networks"
|
9
9
|
option :project
|
10
|
-
option :
|
10
|
+
option :account, default: ""
|
11
11
|
def list
|
12
12
|
project = find_project if options[:project]
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
network["zoneid"]
|
25
|
-
]
|
26
|
-
end
|
27
|
-
print_table table
|
28
|
-
end
|
13
|
+
|
14
|
+
networks = []
|
15
|
+
if project
|
16
|
+
networks = client.list_networks(project['id'])
|
17
|
+
else
|
18
|
+
networks = client.list_networks(-1, options[:account] != '' ? options[:account] : nil )
|
19
|
+
networks + client.list_networks(nil, options[:account] != '' ? options[:account] : nil )
|
20
|
+
end
|
21
|
+
|
22
|
+
if networks.size < 1
|
23
|
+
puts "No networks found"
|
29
24
|
else
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
network["project"],
|
41
|
-
network["state"],
|
42
|
-
network["id"]
|
43
|
-
]
|
44
|
-
end
|
45
|
-
print_table table
|
25
|
+
table = [["Name", "Displaytext", "Account", "Project", "State", "ID"]]
|
26
|
+
networks.each do |network|
|
27
|
+
table << [
|
28
|
+
network["name"],
|
29
|
+
network["displaytext"],
|
30
|
+
network["account"],
|
31
|
+
network["project"],
|
32
|
+
network["state"],
|
33
|
+
network["id"]
|
34
|
+
]
|
46
35
|
end
|
36
|
+
print_table table
|
47
37
|
end
|
48
38
|
end
|
49
39
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class PhysicalNetwork < CloudstackCli::Base
|
2
|
+
|
3
|
+
desc "list", "list physical networks"
|
4
|
+
option :project
|
5
|
+
def list
|
6
|
+
project = find_project if options[:project]
|
7
|
+
networks = client.list_physical_networks
|
8
|
+
if networks.size < 1
|
9
|
+
puts "No networks found"
|
10
|
+
else
|
11
|
+
table = [['Name', 'State', 'ID', 'Zone ID']]
|
12
|
+
networks.each do |network|
|
13
|
+
table << [
|
14
|
+
network["name"],
|
15
|
+
network["state"],
|
16
|
+
network["id"],
|
17
|
+
network["zoneid"]
|
18
|
+
]
|
19
|
+
end
|
20
|
+
print_table table
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -32,13 +32,13 @@ class Server < CloudstackCli::Base
|
|
32
32
|
end
|
33
33
|
|
34
34
|
desc "create NAME", "create a server"
|
35
|
-
option :zone, :
|
36
|
-
option :template, :
|
37
|
-
option :offering, :
|
38
|
-
option :networks, :
|
35
|
+
option :zone, required: true
|
36
|
+
option :template, required: true
|
37
|
+
option :offering, required: true
|
38
|
+
option :networks, type: :array, required: true
|
39
39
|
option :project
|
40
|
-
option :port_forwarding, :
|
41
|
-
option :interactive, :
|
40
|
+
option :port_forwarding, type: :array, aliases: :pf, default: [], description: "public_ip:port"
|
41
|
+
option :interactive, type: :boolean
|
42
42
|
def create(name)
|
43
43
|
CloudstackCli::Helper.new(options[:config]).bootstrap_server(
|
44
44
|
name,
|
@@ -51,6 +51,25 @@ class Server < CloudstackCli::Base
|
|
51
51
|
)
|
52
52
|
end
|
53
53
|
|
54
|
+
desc "destroy NAME", "destroy a server"
|
55
|
+
option :force, description: "destroy without asking", type: :boolean, aliases: '-f'
|
56
|
+
def destroy(name)
|
57
|
+
server = client.get_server(name)
|
58
|
+
unless server
|
59
|
+
error "Server not found."
|
60
|
+
exit
|
61
|
+
end
|
62
|
+
ask = "Are you sure you want to destroy the following server?\n"
|
63
|
+
ask += "#{server['name']} (#{server['state']})?"
|
64
|
+
|
65
|
+
unless options[:force] == true || yes?(ask)
|
66
|
+
exit
|
67
|
+
end
|
68
|
+
|
69
|
+
client.destroy_server(server["id"])
|
70
|
+
puts
|
71
|
+
end
|
72
|
+
|
54
73
|
desc "bootstrap", "interactive creation of a server with network access"
|
55
74
|
def bootstrap
|
56
75
|
CloudstackCli::Helper.new(options[:config]).bootstrap_server_interactive()
|
@@ -1,8 +1,14 @@
|
|
1
1
|
class Stack < CloudstackCli::Base
|
2
2
|
|
3
3
|
desc "create STACKFILE", "create a stack of servers"
|
4
|
-
def create(
|
5
|
-
|
4
|
+
def create(stack_file)
|
5
|
+
#begin
|
6
|
+
stack = JSON.parse(File.read(stack_file))
|
7
|
+
#rescue Exception => e
|
8
|
+
$stderr.puts "Can't find the stack file #{stack_file}."
|
9
|
+
exit
|
10
|
+
#end
|
11
|
+
p stack
|
6
12
|
end
|
7
13
|
|
8
14
|
end
|
@@ -272,6 +272,20 @@ module CloudstackClient
|
|
272
272
|
json['virtualmachine']
|
273
273
|
end
|
274
274
|
|
275
|
+
##
|
276
|
+
# Destroy the server with the specified name.
|
277
|
+
#
|
278
|
+
|
279
|
+
def destroy_server(id)
|
280
|
+
params = {
|
281
|
+
'command' => 'destroyVirtualMachine',
|
282
|
+
'id' => id
|
283
|
+
}
|
284
|
+
|
285
|
+
json = send_async_request(params)
|
286
|
+
json['virtualmachine']
|
287
|
+
end
|
288
|
+
|
275
289
|
##
|
276
290
|
# Finds the service offering with the specified name.
|
277
291
|
|
@@ -468,12 +482,21 @@ module CloudstackClient
|
|
468
482
|
##
|
469
483
|
# Lists all available networks.
|
470
484
|
|
471
|
-
def list_networks(project_id = nil)
|
485
|
+
def list_networks(project_id = nil, account = nil)
|
472
486
|
params = {
|
473
|
-
|
474
|
-
|
487
|
+
'command' => 'listNetworks',
|
488
|
+
'listall' => true,
|
475
489
|
}
|
476
490
|
params['projectid'] = project_id if project_id
|
491
|
+
if account
|
492
|
+
domain = list_accounts({name: account})
|
493
|
+
if domain.size > 0
|
494
|
+
params['account'] = account
|
495
|
+
params['domainid'] = domain.first["domainid"]
|
496
|
+
else
|
497
|
+
puts "Account #{account} not found."
|
498
|
+
end
|
499
|
+
end
|
477
500
|
json = send_request(params)
|
478
501
|
json['network'] || []
|
479
502
|
end
|
@@ -4,8 +4,8 @@ module CloudstackClient
|
|
4
4
|
begin
|
5
5
|
return YAML::load(IO.read(config_file))
|
6
6
|
rescue Exception => e
|
7
|
-
$stderr.puts "Can't find the config file
|
8
|
-
$stderr.puts "
|
7
|
+
$stderr.puts "Can't find the config file #{config_file}."
|
8
|
+
$stderr.puts "To create a new configuration file run \"cs setup\"."
|
9
9
|
exit
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"name": "hadoop_cluster_a",
|
3
|
+
"description": "A small hadoop cluster with hbase",
|
4
|
+
"version": "1.0",
|
5
|
+
"servers": [
|
6
|
+
{
|
7
|
+
"name": "zookeeper-a, zookeeper-b, zookeeper-c",
|
8
|
+
"description": "Zookeeper nodes",
|
9
|
+
"template": "rhel-5.6-base",
|
10
|
+
"service": "small",
|
11
|
+
"port_rules": "2181",
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"name": "hadoop-master",
|
15
|
+
"description": "Hadoop master node",
|
16
|
+
"template": "rhel-5.6-base",
|
17
|
+
"service": "large",
|
18
|
+
"networks": "app-net, storage-net",
|
19
|
+
"port_rules": "50070, 50030, 60010",
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "hadoop-worker-a hadoop-worker-b hadoop-worker-c",
|
23
|
+
"description": "Hadoop worker nodes",
|
24
|
+
"template": "rhel-5.6-base",
|
25
|
+
"service": "medium",
|
26
|
+
"port_rules": "50075, 50060, 60030",
|
27
|
+
}
|
28
|
+
]
|
29
|
+
}
|
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.1.
|
4
|
+
version: 0.1.1
|
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-07-
|
12
|
+
date: 2013-07-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- lib/cloudstack-cli/commands/load_balancer.rb
|
116
116
|
- lib/cloudstack-cli/commands/network.rb
|
117
117
|
- lib/cloudstack-cli/commands/offering.rb
|
118
|
+
- lib/cloudstack-cli/commands/physical_network.rb
|
118
119
|
- lib/cloudstack-cli/commands/project.rb
|
119
120
|
- lib/cloudstack-cli/commands/publicip.rb
|
120
121
|
- lib/cloudstack-cli/commands/router.rb
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- lib/cloudstack-client/ssh_command.rb
|
131
132
|
- lib/cloudstack_cli.rb
|
132
133
|
- lib/cloudstack_client.rb
|
134
|
+
- test/stack_example.json
|
133
135
|
homepage: https://bitbucket.org/swisstxt/cloudstack-cli
|
134
136
|
licenses: []
|
135
137
|
post_install_message:
|
@@ -156,4 +158,5 @@ rubygems_version: 1.8.23
|
|
156
158
|
signing_key:
|
157
159
|
specification_version: 3
|
158
160
|
summary: cloudstack-cli CloudStack API client
|
159
|
-
test_files:
|
161
|
+
test_files:
|
162
|
+
- test/stack_example.json
|