rbvmomi_helper 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 35b56f3ecbf77d888c2550ef41029bcc003a9785
4
+ data.tar.gz: 9e2e9bd5ffb14ce70e1e6b6c8344250337e62795
5
+ SHA512:
6
+ metadata.gz: e05a40b561dd990093b5749da750841355ef7e1a693b35e23752b6ba15e8aa31831f89cb200f44a78f80850c4ecd551594aa8b72f07c76398dfc2723ad341398
7
+ data.tar.gz: 08ff6509a24d0d3a8a386a037768703338dd0c02934a3d38edd2a4bb699f4445d5bcda4364ff095de07790c9fa2fceb3faa6469d045d1cd90b62053b5ccbac2b
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rbvmomi_helper.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Deric Crago
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # RbVmomiHelper
2
+
3
+ [![Build Status](https://travis-ci.org/dericcrago/rbvmomi_helper.svg?branch=master)](https://travis-ci.org/dericcrago/rbvmomi_helper)
4
+ [![codecov.io](https://codecov.io/github/dericcrago/rbvmomi_helper/coverage.svg?branch=master)](https://codecov.io/github/dericcrago/rbvmomi_helper?branch=master)
5
+
6
+ A set of helper methods for [RbVmomi](https://github.com/vmware/rbvmomi).
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'rbvmomi_helper'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ ```bash
19
+ bundle
20
+ ```
21
+
22
+ Or install it yourself as:
23
+
24
+ ```bash
25
+ gem install rbvmomi_helper
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ ```ruby
31
+ require 'rbvmomi_helper'
32
+
33
+ # Find a vm like you normally would using RbVmomi
34
+ # Then use the helper methods
35
+ vm.configure_auth('root', 'password')
36
+ vm.put_file('sleep.sh', '/tmp/sleep.sh')
37
+ vm.start_program('/bin/bash', '/tmp/sleep.sh')
38
+ ```
39
+
40
+ ## Development
41
+
42
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
43
+
44
+ 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).
45
+
46
+ ## Contributing
47
+
48
+ Bug reports and pull requests are welcome on GitHub at https://github.com/dericcrago/rbvmomi_helper.
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task(default: :spec)
7
+ task(test: :spec)
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'rbvmomi_helper'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require 'pry'
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,5 @@
1
+ require 'rbvmomi'
2
+ require 'rbvmomi_helper/version'
3
+ require 'rbvmomi_helper/virtual_machine'
4
+
5
+ RbVmomi::VIM::VirtualMachine.send(:include, RbVmomiHelper::VirtualMachine)
@@ -0,0 +1,3 @@
1
+ module RbVmomiHelper
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,158 @@
1
+ require 'rbvmomi'
2
+
3
+ module RbVmomiHelper
4
+ # VirtualMachine Class
5
+ module VirtualMachine
6
+ def initialize(connection, ref)
7
+ super(connection, ref)
8
+ @gom = @connection.serviceContent.guestOperationsManager
9
+ end
10
+
11
+ def configure_auth(username, password, interactiveSession = false)
12
+ @auth = RbVmomi::VIM::NamePasswordAuthentication(
13
+ username: username,
14
+ password: password,
15
+ interactiveSession: interactiveSession
16
+ )
17
+ end
18
+
19
+ def create_temporary_file(prefix, suffix)
20
+ raise "please 'configure_auth' first" unless @auth
21
+
22
+ @gom.fileManager.CreateTemporaryFileInGuest(
23
+ vm: self,
24
+ auth: @auth,
25
+ prefix: prefix,
26
+ suffix: suffix
27
+ )
28
+ end
29
+
30
+ def delete_file(file_path)
31
+ raise "please 'configure_auth' first" unless @auth
32
+
33
+ @gom.fileManager.DeleteFileInGuest(
34
+ vm: self,
35
+ auth: @auth,
36
+ filePath: file_path
37
+ )
38
+ end
39
+
40
+ def list_processes(pids = [])
41
+ @gom.processManager.ListProcessesInGuest(
42
+ vm: self,
43
+ auth: @auth,
44
+ pids: [*pids]
45
+ )
46
+ end
47
+
48
+ def start_program(program_path, arguments = '',
49
+ working_directory = nil, env_variables = nil)
50
+ raise "please 'configure_guest_auth' first" unless @auth
51
+
52
+ program_spec = RbVmomi::VIM::GuestProgramSpec(
53
+ programPath: program_path,
54
+ arguments: arguments,
55
+ workingDirectory: working_directory,
56
+ envVariables: env_variables
57
+ )
58
+
59
+ @gom.processManager.StartProgramInGuest(
60
+ vm: self,
61
+ auth: @auth,
62
+ spec: program_spec
63
+ )
64
+ end
65
+
66
+ def put_file(source, destination = nil, overwrite = true)
67
+ destination = get_destination_path(source, destination)
68
+ url = initiate_file_transfer_to(source, destination, overwrite)
69
+ uri = URI.parse(url)
70
+
71
+ http = setup_http(uri)
72
+ request = setup_put_request(uri, source)
73
+
74
+ response = http.request(request)
75
+ process_response(response) ? destination : response
76
+ end
77
+
78
+ def validate_credentials
79
+ raise "please 'configure_guest_auth' first" unless @auth
80
+
81
+ @gom.authManager.ValidateCredentialsInGuest(
82
+ vm: self,
83
+ auth: @auth
84
+ )
85
+ end
86
+
87
+ private
88
+
89
+ def get_destination_path(source, destination)
90
+ destination ? get_file_path(destination) : get_file_path(source)
91
+ end
92
+
93
+ def get_file_path(file_path)
94
+ # return file_path if file_path is absolute
95
+ # aka, starts with '/' or 'SOME_LETTER:'
96
+ return file_path if file_path =~ %r{\A(/|[a-zA-Z]:)}
97
+ suffix = File.extname(file_path)
98
+ prefix = File.basename(file_path, suffix) + '_'
99
+ create_temporary_file(prefix, suffix)
100
+ end
101
+
102
+ def file_attributes
103
+ case guest.guestFamily
104
+ when 'linuxGuest'
105
+ RbVmomi::VIM::GuestPosixFileAttributes()
106
+ when 'windowsGuest'
107
+ RbVmomi::VIM::GuestWindowsFileAttributes()
108
+ else
109
+ raise 'unrecognized guestFamily'
110
+ end
111
+ end
112
+
113
+ def initiate_file_transfer_to(source, destination, overwrite)
114
+ raise "please 'configure_guest_auth' first" unless @auth
115
+
116
+ @gom.fileManager.InitiateFileTransferToGuest(
117
+ vm: self,
118
+ auth: @auth,
119
+ guestFilePath: destination,
120
+ fileAttributes: file_attributes,
121
+ fileSize: File.size(source),
122
+ overwrite: overwrite
123
+ )
124
+ end
125
+
126
+ def setup_http(uri)
127
+ http = Net::HTTP.new(uri.host, uri.port)
128
+ configure_https(http) if uri.scheme == 'https'
129
+
130
+ http
131
+ end
132
+
133
+ def configure_https(http)
134
+ opts = @connection.instance_variable_get('@opts')
135
+
136
+ http.use_ssl = true
137
+ http.verify_mode =
138
+ if opts.fetch(:insecure, false)
139
+ OpenSSL::SSL::VERIFY_NONE
140
+ else
141
+ OpenSSL::SSL::VERIFY_PEER
142
+ end
143
+ end
144
+
145
+ def setup_put_request(uri, source)
146
+ request = Net::HTTP::Put.new(uri.request_uri)
147
+ request.body_stream = File.open(source)
148
+ request['Content-Type'] = 'multipart/form-data'
149
+ request.add_field('Content-Length', File.size(source))
150
+
151
+ request
152
+ end
153
+
154
+ def process_response(response)
155
+ response.code == '200'
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rbvmomi_helper/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'rbvmomi_helper'
8
+ spec.version = RbVmomiHelper::VERSION
9
+ spec.authors = ['Deric Crago']
10
+ spec.email = ['deric.crago@gmail.com']
11
+
12
+ spec.summary = 'A set of helper methods for RbVmomi.'
13
+ spec.homepage = 'https://github.com/dericcrago/rbvmomi_helper'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ f.match(%r{^(test|spec|features)/})
17
+ end
18
+ spec.bindir = 'exe'
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_development_dependency('bundler', '~> 1.11')
23
+ spec.add_development_dependency('rake', '~> 10.0')
24
+ spec.add_development_dependency('rspec', '~> 3.0')
25
+
26
+ # Added
27
+ spec.add_dependency('rbvmomi')
28
+ spec.add_development_dependency('vcr')
29
+ spec.add_development_dependency('webmock')
30
+ spec.add_development_dependency('rubocop', '~> 0.37')
31
+ spec.add_development_dependency('rubocop-checkstyle_formatter')
32
+ spec.add_development_dependency('simplecov')
33
+ spec.add_development_dependency('simplecov-json')
34
+ spec.add_development_dependency('simplecov-rcov')
35
+ spec.add_development_dependency('codecov')
36
+ end
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbvmomi_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Deric Crago
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rbvmomi
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '0.37'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0.37'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-checkstyle_formatter
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov-json
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov-rcov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: codecov
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
+ description:
182
+ email:
183
+ - deric.crago@gmail.com
184
+ executables: []
185
+ extensions: []
186
+ extra_rdoc_files: []
187
+ files:
188
+ - .gitignore
189
+ - .rspec
190
+ - .travis.yml
191
+ - Gemfile
192
+ - LICENSE
193
+ - README.md
194
+ - Rakefile
195
+ - bin/console
196
+ - bin/setup
197
+ - lib/rbvmomi_helper.rb
198
+ - lib/rbvmomi_helper/version.rb
199
+ - lib/rbvmomi_helper/virtual_machine.rb
200
+ - rbvmomi_helper.gemspec
201
+ homepage: https://github.com/dericcrago/rbvmomi_helper
202
+ licenses: []
203
+ metadata: {}
204
+ post_install_message:
205
+ rdoc_options: []
206
+ require_paths:
207
+ - lib
208
+ required_ruby_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - '>='
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ required_rubygems_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - '>='
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ requirements: []
219
+ rubyforge_project:
220
+ rubygems_version: 2.0.14.1
221
+ signing_key:
222
+ specification_version: 4
223
+ summary: A set of helper methods for RbVmomi.
224
+ test_files: []