quickmox 0.2.0 → 0.2.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 51ff987bfc392ddaed3e9244f1a665ee22548ac4
4
+ data.tar.gz: 1c4307e709e15702d0ac997892bc1df33d3f4e67
5
+ SHA512:
6
+ metadata.gz: 1287f3d4557a7b5526611dc3e4bf166c78af3be8f1864c43775e400dceb87e280dfc30152d192994ae9b88ef13bff86cb6b07c5f00ed394f6408f03cedee29d1
7
+ data.tar.gz: 859c576eeebdc1b538d71a2de7c6ff65058b1f324afbcfe92b6c64065d49414530708911450b8fb44860c3f22ea5b6ae0dc2c3c4ee764b7ae3c66912d62035b7
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![Build Status](https://travis-ci.org/jkvalk/quickmox.svg?branch=master)](https://travis-ci.org/jkvalk/quickmox)
2
2
  [![Gem Version](https://badge.fury.io/rb/quickmox.svg)](http://badge.fury.io/rb/quickmox)
3
3
  [![Coverage Status](https://coveralls.io/repos/jkvalk/quickmox/badge.svg?branch=master)](https://coveralls.io/r/jkvalk/quickmox?branch=master)
4
+ [![Code Climate](https://codeclimate.com/github/jkvalk/quickmox/badges/gpa.svg)](https://codeclimate.com/github/jkvalk/quickmox)
4
5
 
5
6
  # Quickmox
6
7
 
@@ -28,11 +29,9 @@ Or install it yourself as:
28
29
  require 'quickmox'
29
30
  include Quickmox
30
31
 
31
- hostname = 'host1.example.com'
32
- user = 'root'
33
- pass = 's3cr3t'
34
-
35
- host = Host.new(hostname: hostname, username: user, password: pass).connect
32
+ host = Host.new( SSHTransport.new('hostname','username','password') )
33
+ .connect
34
+ .scan
36
35
 
37
36
  p host.localname
38
37
  p host.uptime
@@ -51,9 +50,7 @@ host.disconnect
51
50
 
52
51
  ## Development
53
52
 
54
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
55
-
56
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
53
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rspec spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
57
54
 
58
55
  ## Contributing
59
56
 
@@ -36,27 +36,30 @@ module Quickmox
36
36
  end
37
37
 
38
38
  def scan
39
- host.exec("qm config #{id}").split("\n").each do |line|
40
- if line =~ /net0:.*=([0-9A-Fa-f:]{17}),/
41
- params[:mac] = $1
42
- params[:mac] = params[:mac].gsub(':', '').downcase
43
- elsif line =~ /cores: ([0-9]{1,3})/
44
- params[:cores] = $1
45
- elsif line =~ /bootdisk: (.*)/
46
- params[:bootdisk] = $1
47
- elsif line =~ /description: (.*)/
48
- params[:description] = $1
49
- elsif line =~ /memory: ([0-9]{1,6})/
50
- params[:memory] = $1
51
- elsif line =~ /name: (.*)/
52
- params[:name] = $1
53
- elsif line =~ /onboot: ([0-9])/
54
- params[:onboot] = $1
55
- elsif line =~ /(scsi|virtio|ide)[0-9]{1,3}: .*size=([0-9]{1,3}[MGTK])/
56
- params[:disk] = $2
39
+ config_lines.each do |line|
40
+ case line
41
+ when /net0:.*=([0-9A-Fa-f:]{17}),/
42
+ params[:mac] = $1
43
+ params[:mac] = params[:mac].gsub(':', '').downcase
44
+ when /cores: ([0-9]{1,3})/
45
+ params[:cores] = $1
46
+ when /(description|name|bootdisk): (.*)/
47
+ params[$1.to_sym] = $2
48
+ when /memory: ([0-9]{1,6})/
49
+ params[:memory] = $1
50
+ when /onboot: ([0-9])/
51
+ params[:onboot] = $1
52
+ when /(scsi|virtio|ide)[0-9]{1,3}: .*size=([0-9]{1,3}[MGTK])/
53
+ params[:disk] = $2
57
54
  end
58
55
  end
59
56
  self
60
57
  end
58
+
59
+ private
60
+
61
+ def config_lines
62
+ host.exec("qm config #{id}").split("\n")
63
+ end
61
64
  end
62
65
  end
@@ -1,12 +1,12 @@
1
1
  class Guestlist < Array
2
2
 
3
- def find(id)
4
- self.each do |el|
5
- if el.id.eql?(id.to_s)
6
- return el
7
- end
3
+ def find(id)
4
+ self.each do |el|
5
+ if el.id.eql?(id.to_s)
6
+ return el
8
7
  end
9
8
  end
9
+ end
10
10
 
11
11
  def scan
12
12
  self.each do |el|
data/lib/quickmox/host.rb CHANGED
@@ -19,30 +19,19 @@ module Quickmox
19
19
  :session,
20
20
  :guests
21
21
 
22
- def initialize(opts = {})
23
- @hostname = opts[:hostname]
24
- @username = opts[:username]
25
- @password = opts[:password]
22
+ def initialize(transport)
23
+ @session = transport
24
+ @guests = Guestlist.new
25
+
26
26
  begin
27
- @ip = Resolv.getaddress(@hostname)
27
+ @ip = Resolv.getaddress(@session.host)
28
28
  rescue => e
29
29
  @ip = String.new
30
30
  end
31
- @guests = Guestlist.new
32
31
  end
33
32
 
34
33
  def connect
35
- begin
36
- @session = Net::SSH.start(hostname,
37
- username,
38
- password: password,
39
- auth_methods: %w(password),
40
- number_of_password_prompts: 0,
41
- timeout: 3)
42
-
43
- rescue => e
44
- raise HostError, "Warning: exception while connecting to host #{hostname}: #{e}"
45
- end
34
+ @session.connect
46
35
  self
47
36
  end
48
37
 
@@ -59,7 +48,7 @@ module Quickmox
59
48
 
60
49
  def guestlist
61
50
  list = Array.new
62
- table = handle_exceptions { session.exec!('qm list') }
51
+ table = session.exec!('qm list')
63
52
  lines = table.split("\n")
64
53
  lines.each do |line|
65
54
  if line =~ /^ *([0-9]{1,4}) */
@@ -70,15 +59,11 @@ module Quickmox
70
59
  end
71
60
 
72
61
  def localname
73
- handle_exceptions do
74
62
  session.exec!('hostname').chomp
75
- end
76
63
  end
77
64
 
78
65
  def uptime
79
- handle_exceptions do
80
66
  session.exec!('uptime').chomp
81
- end
82
67
  end
83
68
 
84
69
  def close
@@ -86,33 +71,18 @@ module Quickmox
86
71
  end
87
72
 
88
73
  def disconnect
89
- begin
90
74
  session.close
91
- rescue => e
92
- raise HostError, "Warning: exception while disconnecting from host #{hostname}: #{e.to_s}"
93
- end
94
75
  end
95
76
 
96
77
  def is_proxmox?
97
- handle_exceptions do
98
78
  output = session.exec!('qm list')
99
79
  (output =~ /VMID NAME/) ? true : false
100
- end
101
80
  end
102
81
 
103
82
  def exec(cmd)
104
- handle_exceptions do
105
- return session.exec!(cmd).chomp
106
- end
83
+ session.exec!(cmd).chomp
107
84
  end
108
85
 
109
- private
110
- def handle_exceptions
111
- begin
112
- yield
113
- rescue => e
114
- raise HostError, "Exception while talking to host #{hostname}: #{e.to_s}"
115
- end
116
- end
86
+
117
87
  end
118
88
  end
@@ -0,0 +1,52 @@
1
+ module Quickmox
2
+
3
+ class SSHTransport
4
+
5
+ class SSHTransportError < StandardError
6
+ end
7
+
8
+ attr_accessor :session, :host, :user, :pass
9
+
10
+ def initialize(host, user, pass)
11
+ @host = host
12
+ @user = user
13
+ @pass = pass
14
+ end
15
+
16
+ def connect
17
+ handle_exceptions do
18
+ @session = Net::SSH.start(host,
19
+ user,
20
+ password: pass,
21
+ auth_methods: %w(password),
22
+ number_of_password_prompts: 0,
23
+ timeout: 3)
24
+ end
25
+ self
26
+ end
27
+
28
+ def close
29
+ handle_exceptions do
30
+ session.close
31
+ end
32
+ end
33
+
34
+ def exec!(cmd)
35
+ handle_exceptions do
36
+ session.exec!(cmd).chomp
37
+ end
38
+
39
+ end
40
+
41
+ private
42
+
43
+ def handle_exceptions
44
+ begin
45
+ yield
46
+ rescue => e
47
+ raise SSHTransportError, "Exception while talking to host #{host}: #{e}"
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module Quickmox
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.2"
3
3
  end
data/lib/quickmox.rb CHANGED
@@ -1,7 +1,8 @@
1
- require "quickmox/version"
2
- require "quickmox/host"
3
- require "quickmox/guest"
4
- require "quickmox/guestlist"
1
+ require 'quickmox/version'
2
+ require 'quickmox/host'
3
+ require 'quickmox/guest'
4
+ require 'quickmox/guestlist'
5
+ require 'quickmox/ssh_transport'
5
6
 
6
7
  module Quickmox
7
8
  end
metadata CHANGED
@@ -1,142 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quickmox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.2.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - J.K.Valk
9
8
  autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2015-06-17 00:00:00.000000000 Z
11
+ date: 2015-06-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.10'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.10'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '10.0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '10.0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: guard
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: guard-rspec
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: coveralls
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: pry
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - ">="
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: net-ssh
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ~>
115
+ - - "~>"
132
116
  - !ruby/object:Gem::Version
133
117
  version: '2.9'
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ~>
122
+ - - "~>"
140
123
  - !ruby/object:Gem::Version
141
124
  version: '2.9'
142
125
  description: This is VERY raw, version 1.0.0 is expected to be first usable implementation.
@@ -146,10 +129,10 @@ executables: []
146
129
  extensions: []
147
130
  extra_rdoc_files: []
148
131
  files:
149
- - .coveralls.yml
150
- - .gitignore
151
- - .rspec
152
- - .travis.yml
132
+ - ".coveralls.yml"
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".travis.yml"
153
136
  - CODE_OF_CONDUCT.md
154
137
  - Gemfile
155
138
  - README.md
@@ -160,32 +143,32 @@ files:
160
143
  - lib/quickmox/guest.rb
161
144
  - lib/quickmox/guestlist.rb
162
145
  - lib/quickmox/host.rb
146
+ - lib/quickmox/ssh_transport.rb
163
147
  - lib/quickmox/version.rb
164
148
  - quickmox.gemspec
165
149
  homepage: https://github.com/jkvalk/quickmox
166
150
  licenses:
167
151
  - MIT
152
+ metadata: {}
168
153
  post_install_message:
169
154
  rdoc_options: []
170
155
  require_paths:
171
156
  - lib
172
157
  required_ruby_version: !ruby/object:Gem::Requirement
173
- none: false
174
158
  requirements:
175
- - - ! '>='
159
+ - - ">="
176
160
  - !ruby/object:Gem::Version
177
161
  version: '0'
178
162
  required_rubygems_version: !ruby/object:Gem::Requirement
179
- none: false
180
163
  requirements:
181
- - - ! '>='
164
+ - - ">="
182
165
  - !ruby/object:Gem::Version
183
166
  version: '0'
184
167
  requirements: []
185
168
  rubyforge_project:
186
- rubygems_version: 1.8.23
169
+ rubygems_version: 2.2.2
187
170
  signing_key:
188
- specification_version: 3
171
+ specification_version: 4
189
172
  summary: Quickmox is a Ruby gem for managing Proxmox hosts by SSH screen-scraping
190
173
  techniques.
191
174
  test_files: []