rancher-api 0.4.0 → 0.5.0

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: 41e9ea6dc2fd3f0013b51ffb2747c422171202df
4
- data.tar.gz: 27918c5db8f5178f148f04f30a705d1ca6fb537d
3
+ metadata.gz: e9dc7fd9ad65a52a06dc3102fd28e42ad351c94f
4
+ data.tar.gz: 4516084002b8c5553f9e58531488dedc0b9e65ec
5
5
  SHA512:
6
- metadata.gz: 7d59d0c4e8f3fcca5552a8e1928769ea7a8a154179ec4e4ee57587042fb8e5cf2e8618f7c11acb224de37540f4a98cd314383920f2cca0630ed895c880ae9766
7
- data.tar.gz: c9a8131560d0a92e8f58cca58470d9f6448310a9b9914d758238ba61d8b6046f8d84dc6e4dc91b0ff0e1de43a5ffd36a0b2c4e0363e2c229310303a272da5cf6
6
+ metadata.gz: 24ad7ced55183d634829837a85fb8f89875d91ce8e828abd645a6412ada28c9745ed1b56cd2efb00aedb05b772ae54162e4114d5b2cd44e1dc0dc45a15fd03ba
7
+ data.tar.gz: e15136bc80186c7fefa734e2dc1b5590c8164d082a7a2a176d2c6d3435e0cff6bde82531e9d2e2860676bb32d419068afbe1fe6a0b58bba79e962992956378f1
@@ -0,0 +1,70 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.2
3
+ Exclude:
4
+ - '*.gemspec'
5
+ - 'Gemfile*'
6
+
7
+ Metrics/ModuleLength:
8
+ Max: 108
9
+ Exclude:
10
+ - 'spec/lib/**/*'
11
+
12
+ # Offense count: 33
13
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
14
+ # URISchemes: http, https
15
+ Metrics/LineLength:
16
+ Max: 120
17
+
18
+ # Offense count: 6
19
+ # Configuration parameters: CountComments.
20
+ Metrics/MethodLength:
21
+ Max: 18
22
+
23
+ # Offense count: 1
24
+ # Cop supports --auto-correct.
25
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
26
+ # SupportedStyles: with_first_parameter, with_fixed_indentation
27
+ Style/AlignParameters:
28
+ Exclude:
29
+ - 'bin/rspec'
30
+
31
+ # Offense count: 2
32
+ # Cop supports --auto-correct.
33
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
34
+ # SupportedStyles: always, conditionals
35
+ Style/AndOr:
36
+ Exclude:
37
+ - 'bin/setup'
38
+ - 'bin/update'
39
+
40
+ # Offense count: 17
41
+ Style/Documentation:
42
+ Enabled: false
43
+
44
+ # Offense count: 6
45
+ # Cop supports --auto-correct.
46
+ # Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues.
47
+ # SupportedStyles: ruby19, ruby19_no_mixed_keys, hash_rockets
48
+ Style/HashSyntax:
49
+ Enabled: false
50
+
51
+ # Offense count: 3
52
+ # Cop supports --auto-correct.
53
+ # Configuration parameters: SupportedStyles.
54
+ # SupportedStyles: call, braces
55
+ Style/LambdaCall:
56
+ EnforcedStyle: braces
57
+
58
+ # Offense count: 2
59
+ # Cop supports --auto-correct.
60
+ # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
61
+ # SupportedStyles: aligned, indented
62
+ Style/MultilineMethodCallIndentation:
63
+ Enabled: false
64
+
65
+ # Offense count: 1
66
+ # Cop supports --auto-correct.
67
+ # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
68
+ # SupportedStyles: space, no_space
69
+ Style/SpaceInsideBlockBraces:
70
+ Enabled: false
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.2.5
@@ -0,0 +1,3 @@
1
+ SimpleCov.start do
2
+ add_filter '/spec/'
3
+ end
@@ -1,4 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.2
4
- before_install: gem install bundler -v 1.10.5
3
+ - 2.2.5
4
+ before_install: gem install bundler -v 1.12.5
@@ -2,6 +2,13 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [0.5.0] - 2016-08-10
6
+
7
+ - added few helpers:
8
+ - #wait_for_state - waiting (EM looping) until a desired state is reached
9
+ - #reload - reloading of resources
10
+ - #run - run actions (custom posts)
11
+
5
12
  ## [0.4.0] - 2016-07-14
6
13
 
7
14
  - update dependencies to work with Rails 5
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rancher-api (0.4.0)
4
+ rancher-api (0.5.0)
5
5
  faraday_middleware
6
6
  faye-websocket
7
7
  her (~> 0.8.1)
@@ -26,6 +26,7 @@ GEM
26
26
  crack (0.4.2)
27
27
  safe_yaml (~> 1.0.0)
28
28
  diff-lcs (1.2.5)
29
+ docile (1.1.5)
29
30
  eventmachine (1.2.0.1)
30
31
  faraday (0.9.2)
31
32
  multipart-post (>= 1.2, < 3)
@@ -34,6 +35,22 @@ GEM
34
35
  faye-websocket (0.10.4)
35
36
  eventmachine (>= 0.12.0)
36
37
  websocket-driver (>= 0.5.1)
38
+ ffi (1.9.10)
39
+ formatador (0.2.5)
40
+ guard (2.14.0)
41
+ formatador (>= 0.2.4)
42
+ listen (>= 2.7, < 4.0)
43
+ lumberjack (~> 1.0)
44
+ nenv (~> 0.1)
45
+ notiffany (~> 0.0)
46
+ pry (>= 0.9.12)
47
+ shellany (~> 0.0)
48
+ thor (>= 0.18.1)
49
+ guard-compat (1.2.1)
50
+ guard-rspec (4.7.2)
51
+ guard (~> 2.1)
52
+ guard-compat (~> 1.1)
53
+ rspec (>= 2.99.0, < 4.0)
37
54
  her (0.8.1)
38
55
  activemodel (>= 3.0.0, <= 4.3.0)
39
56
  activesupport (>= 3.0.0, <= 4.3.0)
@@ -41,15 +58,27 @@ GEM
41
58
  multi_json (~> 1.7)
42
59
  i18n (0.7.0)
43
60
  json (1.8.3)
61
+ listen (3.1.5)
62
+ rb-fsevent (~> 0.9, >= 0.9.4)
63
+ rb-inotify (~> 0.9, >= 0.9.7)
64
+ ruby_dep (~> 1.2)
65
+ lumberjack (1.0.10)
44
66
  method_source (0.8.2)
45
67
  minitest (5.9.0)
46
68
  multi_json (1.12.1)
47
69
  multipart-post (2.0.0)
70
+ nenv (0.3.0)
71
+ notiffany (0.1.0)
72
+ nenv (~> 0.1)
73
+ shellany (~> 0.0)
48
74
  pry (0.10.1)
49
75
  coderay (~> 1.1.0)
50
76
  method_source (~> 0.8.1)
51
77
  slop (~> 3.4)
52
78
  rake (10.4.2)
79
+ rb-fsevent (0.9.7)
80
+ rb-inotify (0.9.7)
81
+ ffi (>= 0.5.0)
53
82
  rspec (3.3.0)
54
83
  rspec-core (~> 3.3.0)
55
84
  rspec-expectations (~> 3.3.0)
@@ -63,8 +92,16 @@ GEM
63
92
  diff-lcs (>= 1.2.0, < 2.0)
64
93
  rspec-support (~> 3.3.0)
65
94
  rspec-support (3.3.0)
95
+ ruby_dep (1.3.1)
66
96
  safe_yaml (1.0.4)
97
+ shellany (0.0.1)
98
+ simplecov (0.12.0)
99
+ docile (~> 1.1.0)
100
+ json (>= 1.8, < 3)
101
+ simplecov-html (~> 0.10.0)
102
+ simplecov-html (0.10.0)
67
103
  slop (3.6.0)
104
+ thor (0.19.1)
68
105
  thread_safe (0.3.5)
69
106
  tzinfo (1.2.2)
70
107
  thread_safe (~> 0.1)
@@ -83,10 +120,12 @@ DEPENDENCIES
83
120
  awesome_print
84
121
  bundler (~> 1.10)
85
122
  byebug
123
+ guard-rspec
86
124
  pry
87
125
  rake (~> 10.0)
88
126
  rancher-api!
89
127
  rspec (~> 3.3.0)
128
+ simplecov
90
129
  vcr (= 2.9.3)
91
130
  webmock (= 1.21.0)
92
131
 
@@ -0,0 +1,16 @@
1
+ guard :rspec, cmd: 'bundle exec rspec' do
2
+ require 'guard/rspec/dsl'
3
+ dsl = Guard::RSpec::Dsl.new(self)
4
+
5
+ # Feel free to open issues for suggestions and improvements
6
+
7
+ # RSpec files
8
+ rspec = dsl.rspec
9
+ watch(rspec.spec_helper) { rspec.spec_dir }
10
+ watch(rspec.spec_support) { rspec.spec_dir }
11
+ watch(rspec.spec_files)
12
+
13
+ # Ruby files
14
+ ruby = dsl.ruby
15
+ dsl.watch_spec_files_for(ruby.lib_files)
16
+ end
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
data/circle.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  machine:
2
2
  ruby:
3
- version: 2.2.2
3
+ version: 2.2.5
4
4
 
5
5
  dependencies:
6
6
  pre:
7
- - gem install bundler -v 1.10.5
7
+ - gem install bundler -v 1.12.5
@@ -5,7 +5,7 @@
5
5
  require 'rancher/api'
6
6
 
7
7
  BRANCH = ENV['CIRCLE_BRANCH']
8
- DIGITAL_OCEAN_ACCESS_TOKEN = 'xxx'
8
+ DIGITAL_OCEAN_ACCESS_TOKEN = 'xxx'.freeze
9
9
 
10
10
  Rancher::Api.configure do |config|
11
11
  config.url = "http://#{ENV['RANCHER_HOST']}/v1/"
@@ -4,6 +4,7 @@ require 'her'
4
4
  require 'rancher/api/configuration'
5
5
  require 'rancher/api/middlewares'
6
6
  require 'rancher/api/version'
7
+ require 'rancher/api/logger'
7
8
 
8
9
  module Rancher
9
10
  module Api
@@ -27,7 +28,7 @@ module Rancher
27
28
  def self.configure
28
29
  yield(configuration)
29
30
 
30
- Her::API.setup url: configuration.url do |c|
31
+ api = Her::API.setup url: configuration.url do |c|
31
32
  # Request
32
33
  c.request :json
33
34
 
@@ -37,12 +38,14 @@ module Rancher
37
38
  # Response
38
39
  c.use Rancher::Api::JsonParserMiddleware
39
40
  c.use Her::Middleware::DefaultParseJSON
41
+ c.use Faraday::Response::Logger, ActiveSupport::Logger.new(STDOUT) if configuration.verbose
40
42
 
41
43
  # Adapter
42
44
  c.use Faraday::Adapter::NetHttp
43
45
  end
44
46
 
45
47
  require 'rancher/api/models'
48
+ api
46
49
  end
47
50
  end
48
51
  end
@@ -4,6 +4,7 @@ module Rancher
4
4
  attr_accessor :url
5
5
  attr_accessor :access_key
6
6
  attr_accessor :secret_key
7
+ attr_accessor :verbose
7
8
 
8
9
  def initialize
9
10
  @url = "#{ENV['RANCHER_URL']}/v1/" if ENV['RANCHER_URL'].present?
@@ -0,0 +1,52 @@
1
+ require 'eventmachine'
2
+
3
+ module Rancher
4
+ module Api
5
+ module Helpers
6
+ module Model
7
+ class RancherWaitTimeOutError < StandardError; end
8
+ class RancherModelError < StandardError; end
9
+ class RancherActionNotAvailableError < StandardError; end
10
+
11
+ TIMEOUT_LIMIT = 900
12
+
13
+ def self_url
14
+ links['self']
15
+ end
16
+
17
+ def reload
18
+ assign_attributes(self.class.find(id).attributes)
19
+ end
20
+
21
+ def run(action, data: {})
22
+ url = actions[action.to_s]
23
+ raise RancherActionNotAvailableError, "Available actions: '#{actions.inspect}'" if url.blank?
24
+ handle_response(self.class.post(url, data))
25
+ end
26
+
27
+ def handle_response(response)
28
+ raise RancherModelError, response.inspect if response.type.eql?('error')
29
+ end
30
+
31
+ def wait_for_state(desired_state)
32
+ EM.run do
33
+ EM.add_timer(TIMEOUT_LIMIT) do
34
+ raise RancherWaitTimeOutError, "Timeout while waiting for transition to: #{desired_state}"
35
+ end
36
+ EM.tick_loop do
37
+ reload
38
+ current_state = state
39
+ if current_state.eql?(desired_state.to_s)
40
+ Logger.log.info "state changed from: #{current_state} => #{desired_state}"
41
+ EM.stop
42
+ else
43
+ Logger.log.info "waiting for state change: #{current_state} => #{desired_state}"
44
+ sleep(1)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ module Rancher
2
+ module Api
3
+ class Logger < ::Logger
4
+ class << self
5
+ def log
6
+ @_logger ||= init
7
+ end
8
+
9
+ def init
10
+ logger = new(STDOUT)
11
+ logger.level = ::Logger::INFO
12
+ logger
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,6 @@
1
+ # helpers
2
+ require 'rancher/api/helpers/model'
3
+ # models
1
4
  require 'rancher/api/models/environment'
2
5
  require 'rancher/api/models/host'
3
6
  require 'rancher/api/models/instance'
@@ -2,7 +2,8 @@
2
2
  module Rancher
3
3
  module Api
4
4
  class Environment
5
- include ::Her::Model
5
+ include Her::Model
6
+ include Helpers::Model
6
7
 
7
8
  belongs_to :project
8
9
  has_many :services
@@ -1,7 +1,8 @@
1
1
  module Rancher
2
2
  module Api
3
3
  class Host
4
- include ::Her::Model
4
+ include Her::Model
5
+ include Helpers::Model
5
6
 
6
7
  belongs_to :machine
7
8
  has_many :instances
@@ -7,6 +7,7 @@ module Rancher
7
7
  #
8
8
  class Instance
9
9
  include ::Her::Model
10
+ include Helpers::Model
10
11
 
11
12
  belongs_to :host
12
13
 
@@ -31,16 +31,16 @@ module Rancher
31
31
  ws = Faye::WebSocket::Client.new(uri.to_s)
32
32
 
33
33
  ws.on :message do |event|
34
- self.response << Base64.decode64(event.data)
34
+ response << Base64.decode64(event.data)
35
35
  end
36
36
 
37
- ws.on :close do |event|
37
+ ws.on :close do |_event|
38
38
  ws = nil
39
39
  EM.stop
40
40
  end
41
41
  end
42
42
 
43
- self.response = self.response.join
43
+ self.response = response.join
44
44
 
45
45
  self
46
46
  end
@@ -2,6 +2,7 @@ module Rancher
2
2
  module Api
3
3
  class Ipaddress
4
4
  include Her::Model
5
+ include Helpers::Model
5
6
 
6
7
  attributes :name, :state, :address
7
8
  end
@@ -3,10 +3,11 @@ require 'rancher/api/models/machine/driver_config'
3
3
  module Rancher
4
4
  module Api
5
5
  class Machine
6
- DIGITAL_OCEAN = 'digitalocean'
7
- VMWARE_VSPHERE = 'vmwarevsphere'
8
-
9
6
  include Her::Model
7
+ include Helpers::Model
8
+
9
+ DIGITAL_OCEAN = 'digitalocean'.freeze
10
+ VMWARE_VSPHERE = 'vmwarevsphere'.freeze
10
11
 
11
12
  attributes :name, :state, :amazonec2Config, :azureConfig, :description,
12
13
  :digitaloceanConfig, :driver, :exoscaleConfig, :externalId,
@@ -16,6 +17,16 @@ module Rancher
16
17
 
17
18
  has_many :hosts
18
19
 
20
+ class << self
21
+ def transitioning
22
+ all.select { |m| m.transitioning.eql?('yes') }
23
+ end
24
+
25
+ def active
26
+ where(state: 'active')
27
+ end
28
+ end
29
+
19
30
  def driver_config
20
31
  case driver
21
32
  when DIGITAL_OCEAN, VMWARE_VSPHERE
@@ -3,10 +3,18 @@ module Rancher
3
3
  module Api
4
4
  class Project
5
5
  include Her::Model
6
+ include Helpers::Model
6
7
 
7
8
  has_many :machines
8
9
  has_many :environments
9
10
  has_many :services
11
+
12
+ class << self
13
+ def find_by_name(name:)
14
+ # filters not working for name yet, so using select
15
+ all.reject { |e| e.state.eql?('purged') }.select { |e| e.name.eql?(name) }
16
+ end
17
+ end
10
18
  end
11
19
  end
12
20
  end
@@ -2,6 +2,7 @@ module Rancher
2
2
  module Api
3
3
  class Service
4
4
  include ::Her::Model
5
+ include Helpers::Model
5
6
 
6
7
  belongs_to :project
7
8
  has_many :instances
@@ -1,5 +1,5 @@
1
1
  module Rancher
2
2
  module Api
3
- VERSION = "0.4.0"
3
+ VERSION = '0.5.0'.freeze
4
4
  end
5
5
  end
@@ -39,4 +39,6 @@ Gem::Specification.new do |spec|
39
39
  spec.add_development_dependency 'webmock', '1.21.0'
40
40
  spec.add_development_dependency 'vcr', '2.9.3'
41
41
  spec.add_development_dependency 'awesome_print'
42
+ spec.add_development_dependency 'guard-rspec'
43
+ spec.add_development_dependency 'simplecov'
42
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rancher-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kurkin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: her
@@ -164,6 +164,34 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: guard-rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: simplecov
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
167
195
  description: Ruby gem to easily connect to Rancher API. Via this gem you can do anything
168
196
  that API lets you to do it
169
197
  email:
@@ -174,11 +202,14 @@ extra_rdoc_files: []
174
202
  files:
175
203
  - ".gitignore"
176
204
  - ".rspec"
205
+ - ".rubocop.yml"
177
206
  - ".ruby-version"
207
+ - ".simplecov"
178
208
  - ".travis.yml"
179
209
  - CHANGELOG.md
180
210
  - Gemfile
181
211
  - Gemfile.lock
212
+ - Guardfile
182
213
  - LICENSE
183
214
  - LICENSE.txt
184
215
  - README.md
@@ -189,6 +220,8 @@ files:
189
220
  - examples/create_docker_host.rb
190
221
  - lib/rancher/api.rb
191
222
  - lib/rancher/api/configuration.rb
223
+ - lib/rancher/api/helpers/model.rb
224
+ - lib/rancher/api/logger.rb
192
225
  - lib/rancher/api/middlewares.rb
193
226
  - lib/rancher/api/middlewares/json_parser_middleware.rb
194
227
  - lib/rancher/api/models.rb
@@ -224,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
257
  version: '0'
225
258
  requirements: []
226
259
  rubyforge_project:
227
- rubygems_version: 2.5.1
260
+ rubygems_version: 2.4.5.1
228
261
  signing_key:
229
262
  specification_version: 4
230
263
  summary: Easily connect to Rancher API!