cloudstack_client 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 132a0bd346be9d8e4a34ce8692b74236fceb4d73
4
- data.tar.gz: 61630c0f64701e451997dc03d26c833762974b46
3
+ metadata.gz: fb4ef1b1f29fe2b33c07e850d1c0c544342c39fd
4
+ data.tar.gz: 5b1b396af2c56a4cb2da5ce4c404c767b77d8019
5
5
  SHA512:
6
- metadata.gz: 46250d5712177ecb8fbc38f4f64d6b098691474d8a405efa1a76a7d27f98dbd041dc558b39db1a531a6ae504a667239da94da3941b26ea18f15bbec6ffa0144c
7
- data.tar.gz: 6acf7f3fce3fbf2d56184dae3ed8b40cc43016400b3a154f1a7913ebfd8989031c5f2270cce787567bfa31e69652bdece92d1d7689fed709b718a66f762a1a6a
6
+ metadata.gz: c80db1a47d4922a35fe90c8cdde8e5588c08241b76353202a0bb1e17d986c11fe569387f44c2f830dd62e759ac6a97fe4a0baa1b82cb7fc02e96e52bef70a7bb
7
+ data.tar.gz: 83bf27b68b50687c04d09467041898a2bb4069268a136146ed6697bff0bfa05da5b5e1aa5b30a033f85e97ef0e8a42a7ad417c7c2cfdd0cd5b5254b74f8526b3
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cloudstack_client/command_generator'
4
+
5
+ CloudstackClient::CommandGenerator.start
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
 
22
22
  gem.add_development_dependency('rdoc')
23
23
  gem.add_development_dependency('rake', '~> 10.0', '>= 10.0.4')
24
+ gem.add_development_dependency('thor')
24
25
  end
@@ -13,13 +13,6 @@ module CloudstackClient
13
13
  @@async_poll_interval = 2.0
14
14
  @@async_timeout = 400
15
15
 
16
- # include all commands
17
- Dir.glob(File.dirname(__FILE__) + "/commands/*.rb").each do |file|
18
- require file
19
- module_name = File.basename(file, '.rb').split('_').map{|f| f.capitalize}.join
20
- include Object.const_get("CloudstackClient").const_get(module_name)
21
- end
22
-
23
16
  attr_accessor :verbose
24
17
 
25
18
  def initialize(api_url, api_key, secret_key, opts = {})
@@ -28,6 +21,19 @@ module CloudstackClient
28
21
  @secret_key = secret_key
29
22
  @verbose = opts[:quiet] ? false : true
30
23
  @debug = opts[:debug] ? true : false
24
+ CloudstackClient::Connection.include_commands unless opts[:no_commands]
25
+ end
26
+
27
+ ##
28
+ # Loads all commands from the commands subdirectory and includes them
29
+ #
30
+
31
+ def self.include_commands
32
+ Dir.glob(File.dirname(__FILE__) + "/commands/*.rb").each do |file|
33
+ require file
34
+ module_name = File.basename(file, '.rb').split('_').map{|f| f.capitalize}.join
35
+ include Object.const_get("CloudstackClient").const_get(module_name)
36
+ end
31
37
  end
32
38
 
33
39
  ##
@@ -70,7 +76,6 @@ module CloudstackClient
70
76
  exit 1
71
77
  end
72
78
 
73
-
74
79
  if response.is_a? Net::HTTPOK
75
80
  begin
76
81
  json = JSON.parse(response.body)
@@ -0,0 +1,75 @@
1
+ require 'cloudstack_client/client'
2
+ require 'connection_helper'
3
+ require 'thor'
4
+ require 'yaml'
5
+
6
+ module CloudstackClient
7
+ class CommandGenerator < Thor
8
+ include Thor::Actions
9
+
10
+ class_option :config_file,
11
+ default: File.join(Dir.home, '.cloudstack-cli.yml'),
12
+ aliases: '-c',
13
+ desc: 'location of your cloudstack-cli configuration file'
14
+
15
+ class_option :env,
16
+ aliases: '-e',
17
+ desc: 'environment to use'
18
+
19
+ class_option :debug,
20
+ desc: 'enable debug output',
21
+ type: :boolean
22
+
23
+ desc "generate", "generate api commands using the Cloudstack API Discovery service"
24
+ def generate
25
+ json = client.send_request('command' => 'listApis')
26
+ commands = json['api'] || []
27
+ commands.each do |command|
28
+ puts "#{command['name']} : #{command['related']}"
29
+ end
30
+ end
31
+
32
+ no_commands do
33
+ def client(opts = {})
34
+ @config ||= load_configuration
35
+ @client ||= CloudstackClient::Connection.new(
36
+ @config[:url],
37
+ @config[:api_key],
38
+ @config[:secret_key],
39
+ {no_commands: true}
40
+ )
41
+ end
42
+
43
+ def load_configuration(config_file = options[:config_file], env = options[:env])
44
+ unless File.exists?(config_file)
45
+ say "Configuration file #{config_file} not found.", :red
46
+ say "Please run \'cs environment add\' to create one."
47
+ exit 1
48
+ end
49
+
50
+ begin
51
+ config = YAML::load(IO.read(config_file))
52
+ rescue
53
+ say "Can't load configuration from file #{config_file}.", :red
54
+ exit 1
55
+ end
56
+
57
+ env ||= config[:default]
58
+ if env
59
+ unless config = config[env]
60
+ say "Can't find environment #{env}.", :red
61
+ exit 1
62
+ end
63
+ end
64
+
65
+ unless config.key?(:url) && config.key?(:api_key) && config.key?(:secret_key)
66
+ say "The environment #{env || '\'-\''} contains no valid data.", :red
67
+ exit 1
68
+ end
69
+ config
70
+ end
71
+
72
+ end # no_commands
73
+
74
+ end # class
75
+ end # module
@@ -119,6 +119,7 @@ module CloudstackClient
119
119
  params['state'] = args[:state] if args[:state]
120
120
  params['state'] = args[:status] if args[:status]
121
121
  params['groupid'] = args[:group_id] if args[:group_id]
122
+ params['keyword'] = args[:keyword] if args[:keyword]
122
123
 
123
124
  if args[:zone]
124
125
  zone = get_zone(args[:zone])
@@ -335,15 +336,14 @@ module CloudstackClient
335
336
  # Destroy the server with the specified name.
336
337
  #
337
338
 
338
- def destroy_server(id, args = {})
339
+ def destroy_server(id, async = true)
339
340
  params = {
340
341
  'command' => 'destroyVirtualMachine',
341
342
  'id' => id
342
343
  }
343
- params['expunge'] = true if args[:expunge]
344
- args[:sync] ? send_request(params) : send_async_request(params)['virtualmachine']
344
+ async ? send_async_request(params)['virtualmachine'] : send_request(params)
345
345
  end
346
346
 
347
347
  end
348
348
 
349
- end
349
+ end
@@ -1,3 +1,3 @@
1
1
  module CloudstackClient
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -3,7 +3,7 @@ module CloudstackClient
3
3
  def self.load_configuration(config_file)
4
4
  begin
5
5
  return YAML::load(IO.read(config_file))
6
- rescue Exception => e
6
+ rescue => e
7
7
  puts "Unable to load '#{config_file}' : #{e}"
8
8
  exit
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstack_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
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-05-29 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 10.0.4
47
+ - !ruby/object:Gem::Dependency
48
+ name: thor
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
47
61
  description: CloudStack API client written in Ruby
48
62
  email:
49
63
  - nik.wolfgramm@gmail.com
@@ -56,9 +70,11 @@ files:
56
70
  - LICENSE.txt
57
71
  - README.md
58
72
  - Rakefile
73
+ - bin/cs-command-generator
59
74
  - cloudstack_client.gemspec
60
75
  - lib/cloudstack_client.rb
61
76
  - lib/cloudstack_client/client.rb
77
+ - lib/cloudstack_client/command_generator.rb
62
78
  - lib/cloudstack_client/commands/account.rb
63
79
  - lib/cloudstack_client/commands/affinity_group.rb
64
80
  - lib/cloudstack_client/commands/capacity.rb
@@ -110,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
126
  version: '0'
111
127
  requirements: []
112
128
  rubyforge_project:
113
- rubygems_version: 2.2.0
129
+ rubygems_version: 2.0.3
114
130
  signing_key:
115
131
  specification_version: 4
116
132
  summary: CloudStack API client written in Ruby