cloudstack_client 1.5.0 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f1821ae743081017bcc2364d49c2143aa32232fe
4
- data.tar.gz: fc7ecb150733a64483c8b140c17d0193c562e5d2
3
+ metadata.gz: 689edb1f1411766d7a826b67539d9d68a4f05602
4
+ data.tar.gz: 581a43d3b56a7ae35c9cce4bf5fa1d341dc4fe4f
5
5
  SHA512:
6
- metadata.gz: 771a583ce86206fbce47659de1c78cacab3a3512340fa603d8ce3291cf1b685502e2075d7adf2df76bfdccd5b9318ee0a7cd7809c19ad88d9c9db32e5cc5a6a3
7
- data.tar.gz: 779249793d7cfc062b72b767f69c0f26ed7ebae87d18287ef629e1c836c3b4888e202ebe32554305513d98bb1cbda1108fbaa2d0f193c4f2a5298f5af31c7d30
6
+ metadata.gz: 44f316e9813d7aac565bcad2984dafb11e8a34d8b6b8218fd1b6dd3ebf94c0f2d6a5fb8abab13e300ea99792c2bab6ac90517f37ece64460754b4379b9b96d7a
7
+ data.tar.gz: 50ade51230f8f45bdca2c4257c1c0e70e14ec5cda55a078f49c387a66b55079dddbb899ba60a582544b0c9ad45893ef5bc7566e947a2562d8b8b4c595de5cd4a
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cloudstack_client (1.5.0)
4
+ cloudstack_client (1.5.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  bond (0.5.1)
10
- minitest (5.10.1)
10
+ minitest (5.10.2)
11
11
  rake (12.0.0)
12
12
  ripl (0.7.1)
13
13
  bond (~> 0.5.1)
@@ -18,7 +18,7 @@ PLATFORMS
18
18
 
19
19
  DEPENDENCIES
20
20
  cloudstack_client!
21
- minitest (~> 5.9)
21
+ minitest (~> 5.10)
22
22
  rake (~> 12.0)
23
23
  ripl (~> 0.7)
24
24
  thor (~> 0.19)
data/README.md CHANGED
@@ -34,12 +34,12 @@ cs = CloudstackClient::Client.new(
34
34
  "SECRET_KEY"
35
35
  )
36
36
 
37
- cs.list_virtual_machines(state: "running").each do |server|
38
- puts server["name"]
37
+ cs.list_virtual_machines(state: "running").each do |vm|
38
+ puts vm["name"]
39
39
  end
40
40
  ```
41
41
 
42
- ### Initialize with options
42
+ ### Advanced Options
43
43
 
44
44
  *Load API definition file from a alternative path and set the version:*
45
45
 
@@ -50,7 +50,7 @@ cs = CloudstackClient::Client.new(
50
50
  "SECRET_KEY",
51
51
  {
52
52
  api_path: "~/cloudstack",
53
- api_version: "4.6"
53
+ api_version: "4.9"
54
54
  }
55
55
  )
56
56
  ```
@@ -66,6 +66,39 @@ cs = CloudstackClient::Client.new(
66
66
  )
67
67
  ```
68
68
 
69
+ ### Using the configuration module
70
+
71
+ The Configuration module of CloudstackClient make it easy to load CloudStack API settings from configuration files.
72
+ Use it like this:
73
+
74
+ ```ruby
75
+ require "cloudstack_client"
76
+ require "cloudstack_client/configuration"
77
+
78
+ # looks for ~/.cloudstack.yml per default
79
+ config = CloudstackClient::Configuration.load
80
+ cs = CloudstackClient::Client.new(config[:url], config[:api_key], config[:secret_key])
81
+ ```
82
+
83
+ A configuration file supports multiple environments and looks like this:
84
+
85
+ ```yaml
86
+ # default environment
87
+ :default: production
88
+
89
+ # production environment
90
+ production:
91
+ :url: "https://my-cloudstack-server/client/api/"
92
+ :api_key: "cloudstack-api-key"
93
+ :secret_key: "cloudstack-api-secret"
94
+
95
+ # test environment
96
+ test:
97
+ :url: "http://my-cloudstack-testserver/client/api/"
98
+ :api_key: "cloudstack-api-key"
99
+ :secret_key: "cloudstack-api-secret"
100
+ ```
101
+
69
102
  ### Interactive Console
70
103
 
71
104
  cloudstack_client comes with an interactive shell to test the client.
@@ -23,5 +23,5 @@ Gem::Specification.new do |gem|
23
23
  gem.add_development_dependency('rake', '~> 12.0')
24
24
  gem.add_development_dependency('thor', '~> 0.19')
25
25
  gem.add_development_dependency('ripl', '~> 0.7')
26
- gem.add_development_dependency('minitest', '~> 5.9')
26
+ gem.add_development_dependency('minitest', '~> 5.10')
27
27
  end
@@ -7,15 +7,13 @@ begin
7
7
  require "thor"
8
8
  require "ripl"
9
9
  rescue LoadError => e
10
- missing_gem = if e.message =~ /thor/
11
- "thor"
12
- elsif e.message =~ /ripl/
13
- "ripl"
14
- else
15
- raise
10
+ %w(thor ripl).each do |gem|
11
+ if e.message =~ /#{gem}/
12
+ puts "Please install the #{gem} gem first ('gem install #{gem}')."
13
+ exit 1
14
+ end
16
15
  end
17
- puts "Please install the #{missing_gem} gem first ('gem install #{missing_gem}')."
18
- exit 1
16
+ raise e.message
19
17
  end
20
18
 
21
19
  module CloudstackClient
@@ -23,7 +21,7 @@ module CloudstackClient
23
21
  include Thor::Actions
24
22
 
25
23
  class_option :config_file,
26
- default: File.join(Dir.home, '.cloudstack-cli.yml'),
24
+ default: Configuration.locate_config_file,
27
25
  aliases: '-c',
28
26
  desc: 'location of your cloudstack-cli configuration file'
29
27
 
@@ -89,7 +87,7 @@ module CloudstackClient
89
87
  desc: 'specify a custom API definition file'
90
88
  option :pretty_print,
91
89
  desc: 'pretty client output',
92
- type: :numeric,
90
+ type: :boolean,
93
91
  default: true
94
92
  def console
95
93
  cs_client = client(options)
@@ -2,32 +2,45 @@ module CloudstackClient
2
2
  require "yaml"
3
3
 
4
4
  module Configuration
5
+
5
6
  def self.load(configuration)
6
- unless File.exists?(configuration[:config_file])
7
- message = "Configuration file '#{configuration[:config_file]}' not found."
8
- raise message
7
+ file = configuration[:config_file] || Configuration.locate_config_file
8
+ unless File.exists?(file)
9
+ raise ConfigurationError, "Configuration file '#{file}' not found."
9
10
  end
11
+
10
12
  begin
11
- config = YAML::load(IO.read(configuration[:config_file]))
13
+ config = YAML::load(IO.read file)
12
14
  rescue => e
13
- message = "Can't load configuration from file '#{configuration[:config_file]}'."
14
- message += "Message: #{e.message}" if configuration[:debug]
15
- message += "Backtrace:\n\t#{e.backtrace.join("\n\t")}" if configuration[:debug]
15
+ message = "Can't load configuration from file '#{file}'."
16
+ if configuration[:debug]
17
+ message += "\nMessage: #{e.message}"
18
+ message += "\nBacktrace:\n\t#{e.backtrace.join("\n\t")}"
19
+ end
16
20
  raise message
17
21
  end
18
22
 
19
- env ||= config[:default]
20
- if env
23
+ if env ||= config[:default]
21
24
  unless config = config[env]
22
- raise "Can't find environment #{env}."
25
+ raise ConfigurationError, "Can't find environment #{env}."
23
26
  end
24
27
  end
25
28
 
26
29
  unless config.key?(:url) && config.key?(:api_key) && config.key?(:secret_key)
27
30
  message = "The environment #{env || '\'-\''} does not contain all required keys."
28
- raise message
31
+ raise ConfigurationError, message
29
32
  end
33
+
30
34
  config.merge(environment: env)
31
35
  end
36
+
37
+ def self.locate_config_file
38
+ %w(.cloudstack .cloudstack-cli).each do |file|
39
+ file = File.join(Dir.home, "#{file}.yml")
40
+ return file if File.exists?(file)
41
+ end
42
+ nil
43
+ end
44
+
32
45
  end
33
46
  end
@@ -2,6 +2,7 @@ module CloudstackClient
2
2
  class Error < StandardError; end
3
3
  class ParameterError < Error; end
4
4
  class ConnectionError < Error; end
5
+ class ConfigurationError < Error; end
5
6
  class ParseError < Error; end
6
7
  class ApiError < Error; end
7
8
  class JobError < Error; end
@@ -1,3 +1,3 @@
1
1
  module CloudstackClient
2
- VERSION = "1.5.0"
2
+ VERSION = "1.5.1"
3
3
  end
@@ -5,11 +5,11 @@ describe CloudstackClient::Configuration do
5
5
 
6
6
  before do
7
7
  @config1 = CloudstackClient::Configuration.load({
8
- config_file: "#{File.expand_path File.dirname(__FILE__)}/data/cloudstack-cli-1.yml",
8
+ config_file: "#{File.expand_path File.dirname(__FILE__)}/data/cloudstack-1.yml",
9
9
  debug: true
10
10
  })
11
11
  @config2 = CloudstackClient::Configuration.load({
12
- config_file: "#{File.expand_path File.dirname(__FILE__)}/data/cloudstack-cli-2.yml",
12
+ config_file: "#{File.expand_path File.dirname(__FILE__)}/data/cloudstack-2.yml",
13
13
  debug: true
14
14
  })
15
15
  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: 1.5.0
4
+ version: 1.5.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: 2017-05-08 00:00:00.000000000 Z
11
+ date: 2017-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '5.9'
61
+ version: '5.10'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '5.9'
68
+ version: '5.10'
69
69
  description: CloudStack API client written in Ruby
70
70
  email:
71
71
  - nik.wolfgramm@gmail.com
@@ -99,8 +99,8 @@ files:
99
99
  - test/configuration_test.rb
100
100
  - test/data/0.42.json
101
101
  - test/data/0.42.json.gz
102
- - test/data/cloudstack-cli-1.yml
103
- - test/data/cloudstack-cli-2.yml
102
+ - test/data/cloudstack-1.yml
103
+ - test/data/cloudstack-2.yml
104
104
  - test/test_helper.rb
105
105
  homepage: https://github.com/niwo/cloudstack_client
106
106
  licenses:
@@ -135,6 +135,6 @@ test_files:
135
135
  - test/configuration_test.rb
136
136
  - test/data/0.42.json
137
137
  - test/data/0.42.json.gz
138
- - test/data/cloudstack-cli-1.yml
139
- - test/data/cloudstack-cli-2.yml
138
+ - test/data/cloudstack-1.yml
139
+ - test/data/cloudstack-2.yml
140
140
  - test/test_helper.rb