mirror of
https://github.com/puppetlabs/vmpooler-provider-vsphere.git
synced 2026-01-26 11:28:40 -05:00
Compare commits
64 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c7bd24fa4 | ||
|
|
ed03dc54fa | ||
|
|
d6127f92de | ||
|
|
3eff725eee | ||
|
|
d1d4c936c8 | ||
|
|
eed45279f7 | ||
|
|
15cd166f9d | ||
|
|
71bcf16ee8 | ||
|
|
29d3d29fee | ||
|
|
ee6e01f601 | ||
|
|
f04162f421 | ||
|
|
c91e62150a | ||
|
|
a223bf4d61 | ||
|
|
93b43ed99d | ||
|
|
7a6685927a | ||
|
|
24204421c6 | ||
|
|
9fa1072a32 | ||
|
|
47176e6b5b | ||
|
|
1dc1d8e568 | ||
|
|
b4819f2d39 | ||
|
|
81f5192ded | ||
|
|
18068ecacf | ||
|
|
69629e1019 | ||
|
|
d538eb200e | ||
|
|
978fc0031a | ||
|
|
c70920a56e | ||
|
|
f0c7d377d1 | ||
|
|
9971e84186 | ||
|
|
7316431f78 | ||
|
|
f02e0eb19a | ||
|
|
7822b2182e | ||
|
|
506e874dad | ||
|
|
c11a783980 | ||
|
|
5ca0555a52 | ||
|
|
b2f7907618 | ||
|
|
677226e83b | ||
|
|
4ba64b942a | ||
|
|
bf46ca2642 | ||
|
|
5d79042a10 | ||
|
|
1e4719e670 | ||
|
|
9e31ed815f | ||
|
|
801aaa743c | ||
|
|
b1871fdab8 | ||
|
|
922e994017 | ||
|
|
21417260da | ||
|
|
f2525c54af | ||
|
|
3f34008795 | ||
|
|
6b440d4142 | ||
|
|
9bb978e702 | ||
|
|
a6633d81d7 | ||
|
|
03adf195a8 | ||
|
|
2f0e817b7c | ||
|
|
1d4d931a10 | ||
|
|
473381b0a0 | ||
|
|
92b1b82c45 | ||
|
|
09c80138ca | ||
|
|
98b5fb1841 | ||
|
|
69e501b93e | ||
|
|
08bc1ed814 | ||
|
|
c0a23ff0d0 | ||
|
|
0579f15a4b | ||
|
|
c0e59a0347 | ||
|
|
130736fa9d | ||
|
|
daa49dd1c9 |
18 changed files with 372 additions and 4428 deletions
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
|
|
@ -5,3 +5,9 @@ updates:
|
||||||
schedule:
|
schedule:
|
||||||
interval: weekly
|
interval: weekly
|
||||||
open-pull-requests-limit: 10
|
open-pull-requests-limit: 10
|
||||||
|
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
|
|
||||||
12
.github/workflows/auto_release_prep.yml
vendored
Normal file
12
.github/workflows/auto_release_prep.yml
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
name: Automated release prep
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
auto_release_prep:
|
||||||
|
uses: puppetlabs/release-engineering-repo-standards/.github/workflows/auto_release_prep.yml@v1
|
||||||
|
secrets: inherit
|
||||||
|
with:
|
||||||
|
project-type: ruby
|
||||||
|
version-file-path: lib/vmpooler-provider-vsphere/version.rb
|
||||||
8
.github/workflows/dependabot_merge.yml
vendored
Normal file
8
.github/workflows/dependabot_merge.yml
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
name: Dependabot auto-merge
|
||||||
|
|
||||||
|
on: pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
dependabot_merge:
|
||||||
|
uses: puppetlabs/release-engineering-repo-standards/.github/workflows/dependabot_merge.yml@v1
|
||||||
|
secrets: inherit
|
||||||
8
.github/workflows/ensure_label.yml
vendored
Normal file
8
.github/workflows/ensure_label.yml
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
name: Ensure label
|
||||||
|
|
||||||
|
on: pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ensure_label:
|
||||||
|
uses: puppetlabs/release-engineering-repo-standards/.github/workflows/ensure_label.yml@v1
|
||||||
|
secrets: inherit
|
||||||
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
|
|
@ -7,10 +7,10 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'puppetlabs/vmpooler-provider-vsphere'
|
if: github.repository == 'puppetlabs/vmpooler-provider-vsphere'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Get Current Version
|
- name: Get Current Version
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v7
|
||||||
id: cv
|
id: cv
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -73,7 +73,7 @@ jobs:
|
||||||
- name: Install Ruby jruby-9.3.6.0
|
- name: Install Ruby jruby-9.3.6.0
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
ruby-version: 'jruby-9.4.1.0'
|
ruby-version: 'jruby-9.4.3.0'
|
||||||
|
|
||||||
- name: Build gem
|
- name: Build gem
|
||||||
run: gem build *.gemspec
|
run: gem build *.gemspec
|
||||||
|
|
|
||||||
4
.github/workflows/security.yml
vendored
4
.github/workflows/security.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: checkout repo content
|
- name: checkout repo content
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: setup ruby
|
- name: setup ruby
|
||||||
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
- name: check lock
|
- name: check lock
|
||||||
run: '[ -f "Gemfile.lock" ] && echo "package lock file exists, skipping" || bundle lock'
|
run: '[ -f "Gemfile.lock" ] && echo "package lock file exists, skipping" || bundle lock'
|
||||||
# install java
|
# install java
|
||||||
- uses: actions/setup-java@v3
|
- uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: 'temurin' # See 'Supported distributions' for available options
|
distribution: 'temurin' # See 'Supported distributions' for available options
|
||||||
java-version: '17'
|
java-version: '17'
|
||||||
|
|
|
||||||
8
.github/workflows/testing.yml
vendored
8
.github/workflows/testing.yml
vendored
|
|
@ -18,9 +18,9 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
ruby-version:
|
ruby-version:
|
||||||
- 'jruby-9.4.1.0'
|
- 'jruby-9.4.3.0'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Set up Ruby
|
- name: Set up Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
|
|
@ -34,9 +34,9 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
ruby-version:
|
ruby-version:
|
||||||
- 'jruby-9.4.1.0'
|
- 'jruby-9.4.3.0'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Set up Ruby
|
- name: Set up Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
71
CHANGELOG.md
71
CHANGELOG.md
|
|
@ -1,5 +1,76 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [3.3.4](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.4) (2023-08-30)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.3...3.3.4)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- \(maint\) Convert booleans and Time objects to strings when being added to redis [\#51](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/51) ([isaac-hammes](https://github.com/isaac-hammes))
|
||||||
|
|
||||||
|
## [3.3.3](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.3) (2023-08-28)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.2...3.3.3)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- \(maint\) Update Gemfile.lock and use block for transaction. [\#49](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/49) ([isaac-hammes](https://github.com/isaac-hammes))
|
||||||
|
|
||||||
|
## [3.3.2](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.2) (2023-08-23)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.1...3.3.2)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- \(maint\) Increase timeout for cloned vms to obtain IPs. [\#47](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/47) ([isaac-hammes](https://github.com/isaac-hammes))
|
||||||
|
|
||||||
|
## [3.3.1](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.1) (2023-08-22)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.3.0...3.3.1)
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
|
||||||
|
- \(RE-15710\) Fix IP address that is returned and increase timeout [\#44](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/44) ([yachub](https://github.com/yachub))
|
||||||
|
|
||||||
|
## [3.3.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.3.0) (2023-08-18)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.2.0...3.3.0)
|
||||||
|
|
||||||
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
- \(POD-10\) Log reason for failed VM checks. [\#42](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/42) ([isaac-hammes](https://github.com/isaac-hammes))
|
||||||
|
|
||||||
|
## [3.2.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.2.0) (2023-08-10)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.1.0...3.2.0)
|
||||||
|
|
||||||
|
**Implemented enhancements:**
|
||||||
|
|
||||||
|
- Bump jruby to 9.4.3.0 and update lockfile [\#40](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/40) ([yachub](https://github.com/yachub))
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Bump thor from 1.2.1 to 1.2.2 [\#38](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/38) ([dependabot[bot]](https://github.com/apps/dependabot))
|
||||||
|
- Bump vmpooler from 3.0.0 to 3.1.0 [\#37](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/37) ([dependabot[bot]](https://github.com/apps/dependabot))
|
||||||
|
- Bump rack-test from 2.0.2 to 2.1.0 [\#36](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/36) ([dependabot[bot]](https://github.com/apps/dependabot))
|
||||||
|
|
||||||
|
## [3.1.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.1.0) (2023-05-01)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/3.0.0...3.1.0)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Migrate issue management to Jira [\#34](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/34) ([yachub](https://github.com/yachub))
|
||||||
|
- Bump jruby to 9.4.2.0 [\#33](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/33) ([yachub](https://github.com/yachub))
|
||||||
|
|
||||||
|
## [3.0.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/3.0.0) (2023-04-19)
|
||||||
|
|
||||||
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/2.1.0...3.0.0)
|
||||||
|
|
||||||
|
**Breaking changes:**
|
||||||
|
|
||||||
|
- \(RE-15124\) Collect VMs IP for use with DNS Plugins [\#29](https://github.com/puppetlabs/vmpooler-provider-vsphere/pull/29) ([yachub](https://github.com/yachub))
|
||||||
|
|
||||||
## [2.1.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/2.1.0) (2023-03-06)
|
## [2.1.0](https://github.com/puppetlabs/vmpooler-provider-vsphere/tree/2.1.0) (2023-03-06)
|
||||||
|
|
||||||
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/2.0.0...2.1.0)
|
[Full Changelog](https://github.com/puppetlabs/vmpooler-provider-vsphere/compare/2.0.0...2.1.0)
|
||||||
|
|
|
||||||
172
Gemfile.lock
172
Gemfile.lock
|
|
@ -1,9 +1,9 @@
|
||||||
PATH
|
PATH
|
||||||
remote: .
|
remote: .
|
||||||
specs:
|
specs:
|
||||||
vmpooler-provider-vsphere (2.1.0)
|
vmpooler-provider-vsphere (3.3.4)
|
||||||
rbvmomi2 (>= 3.1, < 4.0)
|
rbvmomi2 (>= 3.1, < 4.0)
|
||||||
vmpooler (~> 2.4)
|
vmpooler (~> 3.0)
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
|
|
@ -14,105 +14,125 @@ GEM
|
||||||
climate_control (1.2.0)
|
climate_control (1.2.0)
|
||||||
coderay (1.1.3)
|
coderay (1.1.3)
|
||||||
concurrent-ruby (1.2.2)
|
concurrent-ruby (1.2.2)
|
||||||
connection_pool (2.3.0)
|
connection_pool (2.4.1)
|
||||||
deep_merge (1.2.2)
|
deep_merge (1.2.2)
|
||||||
diff-lcs (1.5.0)
|
diff-lcs (1.5.0)
|
||||||
docile (1.4.0)
|
docile (1.4.0)
|
||||||
faraday (2.7.4)
|
faraday (2.7.10)
|
||||||
faraday-net_http (>= 2.0, < 3.1)
|
faraday-net_http (>= 2.0, < 3.1)
|
||||||
ruby2_keywords (>= 0.0.4)
|
ruby2_keywords (>= 0.0.4)
|
||||||
faraday-net_http (3.0.2)
|
faraday-net_http (3.0.2)
|
||||||
ffi (1.15.5-java)
|
ffi (1.15.5-java)
|
||||||
google-cloud-env (1.6.0)
|
google-cloud-env (1.6.0)
|
||||||
faraday (>= 0.17.3, < 3.0)
|
faraday (>= 0.17.3, < 3.0)
|
||||||
|
json (2.6.3)
|
||||||
json (2.6.3-java)
|
json (2.6.3-java)
|
||||||
method_source (1.0.0)
|
method_source (1.0.0)
|
||||||
mock_redis (0.36.0)
|
mock_redis (0.37.0)
|
||||||
ruby2_keywords
|
mustermann (3.0.0)
|
||||||
mustermann (2.0.2)
|
|
||||||
ruby2_keywords (~> 0.0.1)
|
ruby2_keywords (~> 0.0.1)
|
||||||
net-ldap (0.17.1)
|
net-ldap (0.18.0)
|
||||||
nio4r (2.5.8-java)
|
nio4r (2.5.9)
|
||||||
nokogiri (1.14.2-java)
|
nio4r (2.5.9-java)
|
||||||
|
nokogiri (1.15.4-java)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
opentelemetry-api (1.1.0)
|
nokogiri (1.15.4-x86_64-linux)
|
||||||
opentelemetry-common (0.19.6)
|
racc (~> 1.4)
|
||||||
|
opentelemetry-api (1.2.2)
|
||||||
|
opentelemetry-common (0.20.0)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-exporter-jaeger (0.20.1)
|
opentelemetry-exporter-jaeger (0.23.0)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.1)
|
||||||
opentelemetry-common (~> 0.19.2)
|
opentelemetry-common (~> 0.20)
|
||||||
opentelemetry-sdk (~> 1.0)
|
opentelemetry-sdk (~> 1.2)
|
||||||
|
opentelemetry-semantic_conventions
|
||||||
thrift
|
thrift
|
||||||
opentelemetry-instrumentation-base (0.19.0)
|
opentelemetry-instrumentation-base (0.22.2)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-concurrent_ruby (0.19.2)
|
opentelemetry-registry (~> 0.1)
|
||||||
|
opentelemetry-instrumentation-concurrent_ruby (0.21.1)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.19.0)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-http_client (0.19.4)
|
opentelemetry-instrumentation-http_client (0.22.2)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-common (~> 0.19.3)
|
opentelemetry-common (~> 0.20.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.19.0)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-redis (0.21.3)
|
opentelemetry-instrumentation-rack (0.23.4)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-common (~> 0.19.3)
|
opentelemetry-common (~> 0.20.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.19.0)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-sinatra (0.19.3)
|
opentelemetry-instrumentation-redis (0.25.3)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-common (~> 0.19.3)
|
opentelemetry-common (~> 0.20.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.19.0)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-registry (0.2.0)
|
opentelemetry-instrumentation-sinatra (0.23.2)
|
||||||
|
opentelemetry-api (~> 1.0)
|
||||||
|
opentelemetry-common (~> 0.20.0)
|
||||||
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
|
opentelemetry-instrumentation-rack (~> 0.21)
|
||||||
|
opentelemetry-registry (0.3.0)
|
||||||
opentelemetry-api (~> 1.1)
|
opentelemetry-api (~> 1.1)
|
||||||
opentelemetry-resource_detectors (0.19.1)
|
opentelemetry-resource_detectors (0.24.1)
|
||||||
google-cloud-env
|
google-cloud-env
|
||||||
opentelemetry-sdk
|
opentelemetry-sdk (~> 1.0)
|
||||||
opentelemetry-sdk (1.2.0)
|
opentelemetry-sdk (1.3.0)
|
||||||
opentelemetry-api (~> 1.1)
|
opentelemetry-api (~> 1.1)
|
||||||
opentelemetry-common (~> 0.19.3)
|
opentelemetry-common (~> 0.20)
|
||||||
opentelemetry-registry (~> 0.2)
|
opentelemetry-registry (~> 0.2)
|
||||||
opentelemetry-semantic_conventions
|
opentelemetry-semantic_conventions
|
||||||
opentelemetry-semantic_conventions (1.8.0)
|
opentelemetry-semantic_conventions (1.10.0)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
optimist (3.0.1)
|
optimist (3.1.0)
|
||||||
parallel (1.22.1)
|
parallel (1.23.0)
|
||||||
parser (3.2.1.0)
|
parser (3.2.2.3)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
|
racc
|
||||||
pickup (0.0.11)
|
pickup (0.0.11)
|
||||||
prometheus-client (2.1.0)
|
prometheus-client (4.2.1)
|
||||||
|
pry (0.14.2)
|
||||||
|
coderay (~> 1.1)
|
||||||
|
method_source (~> 1.0)
|
||||||
pry (0.14.2-java)
|
pry (0.14.2-java)
|
||||||
coderay (~> 1.1)
|
coderay (~> 1.1)
|
||||||
method_source (~> 1.0)
|
method_source (~> 1.0)
|
||||||
spoon (~> 0.0)
|
spoon (~> 0.0)
|
||||||
puma (5.6.5-java)
|
puma (6.3.1)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
racc (1.6.2-java)
|
puma (6.3.1-java)
|
||||||
rack (2.2.6.2)
|
nio4r (~> 2.0)
|
||||||
rack-protection (2.2.4)
|
racc (1.7.1)
|
||||||
rack
|
racc (1.7.1-java)
|
||||||
rack-test (2.0.2)
|
rack (2.2.8)
|
||||||
|
rack-protection (3.1.0)
|
||||||
|
rack (~> 2.2, >= 2.2.4)
|
||||||
|
rack-test (2.1.0)
|
||||||
rack (>= 1.3)
|
rack (>= 1.3)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.0.6)
|
rake (13.0.6)
|
||||||
rbvmomi2 (3.6.0)
|
rbvmomi2 (3.6.1)
|
||||||
builder (~> 3.2)
|
builder (~> 3.2)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
nokogiri (~> 1.12, >= 1.12.5)
|
nokogiri (~> 1.12, >= 1.12.5)
|
||||||
optimist (~> 3.0)
|
optimist (~> 3.0)
|
||||||
redis (4.8.1)
|
redis (5.0.7)
|
||||||
regexp_parser (2.7.0)
|
redis-client (>= 0.9.0)
|
||||||
rexml (3.2.5)
|
redis-client (0.16.0)
|
||||||
|
connection_pool
|
||||||
|
regexp_parser (2.8.1)
|
||||||
|
rexml (3.2.6)
|
||||||
rspec (3.12.0)
|
rspec (3.12.0)
|
||||||
rspec-core (~> 3.12.0)
|
rspec-core (~> 3.12.0)
|
||||||
rspec-expectations (~> 3.12.0)
|
rspec-expectations (~> 3.12.0)
|
||||||
rspec-mocks (~> 3.12.0)
|
rspec-mocks (~> 3.12.0)
|
||||||
rspec-core (3.12.1)
|
rspec-core (3.12.2)
|
||||||
rspec-support (~> 3.12.0)
|
rspec-support (~> 3.12.0)
|
||||||
rspec-expectations (3.12.2)
|
rspec-expectations (3.12.3)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.12.0)
|
rspec-support (~> 3.12.0)
|
||||||
rspec-mocks (3.12.3)
|
rspec-mocks (3.12.6)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.12.0)
|
rspec-support (~> 3.12.0)
|
||||||
rspec-support (3.12.0)
|
rspec-support (3.12.1)
|
||||||
rubocop (1.28.2)
|
rubocop (1.28.2)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.1.0.0)
|
parser (>= 3.1.0.0)
|
||||||
|
|
@ -122,9 +142,9 @@ GEM
|
||||||
rubocop-ast (>= 1.17.0, < 2.0)
|
rubocop-ast (>= 1.17.0, < 2.0)
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
unicode-display_width (>= 1.4.0, < 3.0)
|
unicode-display_width (>= 1.4.0, < 3.0)
|
||||||
rubocop-ast (1.27.0)
|
rubocop-ast (1.29.0)
|
||||||
parser (>= 3.2.1.0)
|
parser (>= 3.2.1.0)
|
||||||
ruby-progressbar (1.12.0)
|
ruby-progressbar (1.13.0)
|
||||||
ruby2_keywords (0.0.5)
|
ruby2_keywords (0.0.5)
|
||||||
simplecov (0.22.0)
|
simplecov (0.22.0)
|
||||||
docile (~> 1.1)
|
docile (~> 1.1)
|
||||||
|
|
@ -132,39 +152,39 @@ GEM
|
||||||
simplecov_json_formatter (~> 0.1)
|
simplecov_json_formatter (~> 0.1)
|
||||||
simplecov-html (0.12.3)
|
simplecov-html (0.12.3)
|
||||||
simplecov_json_formatter (0.1.4)
|
simplecov_json_formatter (0.1.4)
|
||||||
sinatra (2.2.4)
|
sinatra (3.1.0)
|
||||||
mustermann (~> 2.0)
|
mustermann (~> 3.0)
|
||||||
rack (~> 2.2)
|
rack (~> 2.2, >= 2.2.4)
|
||||||
rack-protection (= 2.2.4)
|
rack-protection (= 3.1.0)
|
||||||
tilt (~> 2.0)
|
tilt (~> 2.0)
|
||||||
spicy-proton (2.1.15)
|
spicy-proton (2.1.15)
|
||||||
bindata (~> 2.3)
|
bindata (~> 2.3)
|
||||||
spoon (0.0.6)
|
spoon (0.0.6)
|
||||||
ffi
|
ffi
|
||||||
statsd-ruby (1.5.0)
|
statsd-ruby (1.5.0)
|
||||||
thor (1.2.1)
|
thor (1.2.2)
|
||||||
thrift (0.18.1)
|
thrift (0.18.1)
|
||||||
tilt (2.1.0)
|
tilt (2.2.0)
|
||||||
unicode-display_width (2.4.2)
|
unicode-display_width (2.4.2)
|
||||||
vmpooler (2.4.0)
|
vmpooler (3.5.1)
|
||||||
concurrent-ruby (~> 1.1)
|
concurrent-ruby (~> 1.1)
|
||||||
connection_pool (~> 2.2)
|
connection_pool (~> 2.4)
|
||||||
deep_merge (~> 1.2)
|
deep_merge (~> 1.2)
|
||||||
net-ldap (~> 0.16)
|
net-ldap (~> 0.16)
|
||||||
opentelemetry-exporter-jaeger (= 0.20.1)
|
opentelemetry-exporter-jaeger (= 0.23.0)
|
||||||
opentelemetry-instrumentation-concurrent_ruby (= 0.19.2)
|
opentelemetry-instrumentation-concurrent_ruby (= 0.21.1)
|
||||||
opentelemetry-instrumentation-http_client (= 0.19.4)
|
opentelemetry-instrumentation-http_client (= 0.22.2)
|
||||||
opentelemetry-instrumentation-redis (= 0.21.3)
|
opentelemetry-instrumentation-redis (= 0.25.3)
|
||||||
opentelemetry-instrumentation-sinatra (= 0.19.3)
|
opentelemetry-instrumentation-sinatra (= 0.23.2)
|
||||||
opentelemetry-resource_detectors (= 0.19.1)
|
opentelemetry-resource_detectors (= 0.24.1)
|
||||||
opentelemetry-sdk (~> 1.0, >= 1.0.2)
|
opentelemetry-sdk (~> 1.3, >= 1.3.0)
|
||||||
pickup (~> 0.0.11)
|
pickup (~> 0.0.11)
|
||||||
prometheus-client (~> 2.0)
|
prometheus-client (>= 2, < 5)
|
||||||
puma (~> 5.0, >= 5.0.4)
|
puma (>= 5.0.4, < 7)
|
||||||
rack (~> 2.2)
|
rack (>= 2.2, < 4.0)
|
||||||
rake (~> 13.0)
|
rake (~> 13.0)
|
||||||
redis (~> 4.1)
|
redis (~> 5.0)
|
||||||
sinatra (~> 2.0)
|
sinatra (>= 2, < 4)
|
||||||
spicy-proton (~> 2.1)
|
spicy-proton (~> 2.1)
|
||||||
statsd-ruby (~> 1.4)
|
statsd-ruby (~> 1.4)
|
||||||
yarjuf (2.0.0)
|
yarjuf (2.0.0)
|
||||||
|
|
@ -172,8 +192,8 @@ GEM
|
||||||
rspec (~> 3)
|
rspec (~> 3)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
universal-java-1.8
|
|
||||||
universal-java-11
|
universal-java-11
|
||||||
|
x86_64-linux
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
climate_control (>= 0.2.0)
|
climate_control (>= 0.2.0)
|
||||||
|
|
@ -188,4 +208,4 @@ DEPENDENCIES
|
||||||
yarjuf (>= 2.0)
|
yarjuf (>= 2.0)
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.2.29
|
2.4.10
|
||||||
|
|
|
||||||
7
install-gemfile-lock
Executable file
7
install-gemfile-lock
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment
|
||||||
|
docker run -it --rm \
|
||||||
|
-v $(pwd):/app \
|
||||||
|
jruby:9.4.3.0-jdk11 \
|
||||||
|
/bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends make git netbase && cd /app && gem install bundler && bundle install --jobs 3; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
module VmpoolerProviderVsphere
|
module VmpoolerProviderVsphere
|
||||||
VERSION = '2.1.0'
|
VERSION = '3.3.4'
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,11 @@ module Vmpooler
|
||||||
'vsphere'
|
'vsphere'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def domain(pool_name)
|
||||||
|
dns_plugin_name = pool_config(pool_name)['dns_plugin']
|
||||||
|
dns_config(dns_plugin_name)
|
||||||
|
end
|
||||||
|
|
||||||
def folder_configured?(folder_title, base_folder, configured_folders, allowlist)
|
def folder_configured?(folder_title, base_folder, configured_folders, allowlist)
|
||||||
return true if allowlist&.include?(folder_title)
|
return true if allowlist&.include?(folder_title)
|
||||||
return false unless configured_folders.keys.include?(folder_title)
|
return false unless configured_folders.keys.include?(folder_title)
|
||||||
|
|
@ -63,14 +68,14 @@ module Vmpooler
|
||||||
try = 0 if try.nil?
|
try = 0 if try.nil?
|
||||||
max_tries = 3
|
max_tries = 3
|
||||||
@redis.with_metrics do |redis|
|
@redis.with_metrics do |redis|
|
||||||
redis.multi
|
redis.multi do |transaction|
|
||||||
redis.srem("vmpooler__completed__#{pool}", vm_name)
|
transaction.srem("vmpooler__completed__#{pool}", vm_name)
|
||||||
redis.hdel("vmpooler__active__#{pool}", vm_name)
|
transaction.hdel("vmpooler__active__#{pool}", vm_name)
|
||||||
redis.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now)
|
transaction.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now.to_s)
|
||||||
|
|
||||||
# Auto-expire metadata key
|
# Auto-expire metadata key
|
||||||
redis.expire("vmpooler__vm__#{vm_name}", (data_ttl * 60 * 60))
|
transaction.expire("vmpooler__vm__#{vm_name}", (data_ttl * 60 * 60))
|
||||||
redis.exec
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
start = Time.now
|
start = Time.now
|
||||||
|
|
@ -387,6 +392,16 @@ module Vmpooler
|
||||||
vm_hash
|
vm_hash
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The inner method requires vmware tools running in the guest os
|
||||||
|
def get_vm_ip_address(vm_name, pool_name)
|
||||||
|
@connection_pool.with_metrics do |pool_object|
|
||||||
|
connection = ensured_vsphere_connection(pool_object)
|
||||||
|
vm_object = find_vm(pool_name, vm_name, connection)
|
||||||
|
vm_hash = generate_vm_hash(vm_object, pool_name)
|
||||||
|
return vm_hash['ip']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def create_config_spec(vm_name, template_name, extra_config)
|
def create_config_spec(vm_name, template_name, extra_config)
|
||||||
RbVmomi::VIM.VirtualMachineConfigSpec(
|
RbVmomi::VIM.VirtualMachineConfigSpec(
|
||||||
annotation: JSON.pretty_generate(
|
annotation: JSON.pretty_generate(
|
||||||
|
|
@ -540,13 +555,15 @@ module Vmpooler
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def vm_ready?(_pool_name, vm_name)
|
def vm_ready?(pool_name, vm_name, redis)
|
||||||
begin
|
begin
|
||||||
open_socket(vm_name, global_config[:config]['domain'])
|
domain = domain(pool_name)
|
||||||
rescue StandardError => _e
|
open_socket(vm_name, domain)
|
||||||
|
rescue StandardError => e
|
||||||
|
redis.hset("vmpooler__vm__#{vm_name}", 'open_socket_error', e.to_s)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
redis.hdel("vmpooler__vm__#{vm_name}", 'open_socket_error')
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -582,13 +599,30 @@ module Vmpooler
|
||||||
boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime
|
boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime
|
||||||
powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState
|
powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState
|
||||||
|
|
||||||
|
ip_maxloop = 240
|
||||||
|
ip_loop_delay = 1
|
||||||
|
ip_loop_count = 1
|
||||||
|
ip = nil
|
||||||
|
invalid_addresses = /(0|169)\.(0|254)\.\d+\.\d+/
|
||||||
|
while ip.nil?
|
||||||
|
sleep(ip_loop_delay)
|
||||||
|
ip = vm_object.guest_ip
|
||||||
|
ip = nil if !ip.nil? && ip.match?(invalid_addresses)
|
||||||
|
unless ip_maxloop == 0
|
||||||
|
break if ip_loop_count >= ip_maxloop
|
||||||
|
|
||||||
|
ip_loop_count += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
{
|
{
|
||||||
'name' => vm_object.name,
|
'name' => vm_object.name,
|
||||||
'hostname' => hostname,
|
'hostname' => hostname,
|
||||||
'template' => pool_configuration['template'],
|
'template' => pool_configuration['template'],
|
||||||
'poolname' => pool_name,
|
'poolname' => pool_name,
|
||||||
'boottime' => boottime,
|
'boottime' => boottime,
|
||||||
'powerstate' => powerstate
|
'powerstate' => powerstate,
|
||||||
|
'ip' => ip
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1069,6 +1103,9 @@ module Vmpooler
|
||||||
begin
|
begin
|
||||||
connection = ensured_vsphere_connection(pool_object)
|
connection = ensured_vsphere_connection(pool_object)
|
||||||
vm_hash = get_vm_details(pool_name, vm_name, connection)
|
vm_hash = get_vm_details(pool_name, vm_name, connection)
|
||||||
|
|
||||||
|
raise StandardError, 'failed to get vm details. vm is unreachable or no longer exists' if vm_hash.nil?
|
||||||
|
|
||||||
@redis.with_metrics do |redis|
|
@redis.with_metrics do |redis|
|
||||||
redis.hset("vmpooler__vm__#{vm_name}", 'host', vm_hash['host_name'])
|
redis.hset("vmpooler__vm__#{vm_name}", 'host', vm_hash['host_name'])
|
||||||
migration_count = redis.scard('vmpooler__migration')
|
migration_count = redis.scard('vmpooler__migration')
|
||||||
|
|
@ -1103,10 +1140,10 @@ module Vmpooler
|
||||||
target_host_object = find_host_by_dnsname(connection, target_host_name)
|
target_host_object = find_host_by_dnsname(connection, target_host_name)
|
||||||
finish = migrate_vm_and_record_timing(pool_name, vm_name, vm_hash, target_host_object, target_host_name)
|
finish = migrate_vm_and_record_timing(pool_name, vm_name, vm_hash, target_host_object, target_host_name)
|
||||||
@redis.with_metrics do |redis|
|
@redis.with_metrics do |redis|
|
||||||
redis.multi
|
redis.multi do |transaction|
|
||||||
redis.hset("vmpooler__vm__#{vm_name}", 'host', target_host_name)
|
transaction.hset("vmpooler__vm__#{vm_name}", 'host', target_host_name)
|
||||||
redis.hset("vmpooler__vm__#{vm_name}", 'migrated', true)
|
transaction.hset("vmpooler__vm__#{vm_name}", 'migrated', 'true')
|
||||||
redis.exec
|
end
|
||||||
end
|
end
|
||||||
logger.log('s', "[>] [#{pool_name}] '#{vm_name}' migrated from #{vm_hash['host_name']} to #{target_host_name} in #{finish} seconds")
|
logger.log('s', "[>] [#{pool_name}] '#{vm_name}' migrated from #{vm_hash['host_name']} to #{target_host_name} in #{finish} seconds")
|
||||||
ensure
|
ensure
|
||||||
|
|
@ -1124,10 +1161,10 @@ module Vmpooler
|
||||||
metrics.increment("migrate_to.#{dest_host_name}")
|
metrics.increment("migrate_to.#{dest_host_name}")
|
||||||
@redis.with_metrics do |redis|
|
@redis.with_metrics do |redis|
|
||||||
checkout_to_migration = format('%<time>.2f', time: Time.now - Time.parse(redis.hget("vmpooler__vm__#{vm_name}", 'checkout')))
|
checkout_to_migration = format('%<time>.2f', time: Time.now - Time.parse(redis.hget("vmpooler__vm__#{vm_name}", 'checkout')))
|
||||||
redis.multi
|
redis.multi do |transaction|
|
||||||
redis.hset("vmpooler__vm__#{vm_name}", 'migration_time', finish)
|
transaction.hset("vmpooler__vm__#{vm_name}", 'migration_time', finish)
|
||||||
redis.hset("vmpooler__vm__#{vm_name}", 'checkout_to_migration', checkout_to_migration)
|
transaction.hset("vmpooler__vm__#{vm_name}", 'checkout_to_migration', checkout_to_migration)
|
||||||
redis.exec
|
end
|
||||||
end
|
end
|
||||||
finish
|
finish
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
# The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment
|
# The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment
|
||||||
#
|
#
|
||||||
# Update Gemfile.lock
|
# Update Gemfile.lock
|
||||||
docker run -it --rm \
|
docker run -t --rm \
|
||||||
-v $(pwd):/app \
|
-v $(pwd):/app \
|
||||||
jruby:9.4.1.0-jdk11 \
|
jruby:9.4.3.0-jdk11 \
|
||||||
/bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'
|
/bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'
|
||||||
|
|
||||||
# Update Changelog
|
# Update Changelog
|
||||||
docker run -it --rm -e CHANGELOG_GITHUB_TOKEN -v $(pwd):/usr/local/src/your-app \
|
docker run -t --rm -e CHANGELOG_GITHUB_TOKEN -v $(pwd):/usr/local/src/your-app \
|
||||||
githubchangeloggenerator/github-changelog-generator:1.16.2 \
|
githubchangeloggenerator/github-changelog-generator:1.16.2 \
|
||||||
github_changelog_generator --future-release $(grep VERSION lib/vmpooler-provider-vsphere/version.rb |rev |cut -d "'" -f2 |rev)
|
github_changelog_generator --future-release $(grep VERSION lib/vmpooler-provider-vsphere/version.rb |rev |cut -d "'" -f2 |rev)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -198,13 +198,24 @@ MockVirtualDiskManager = Object
|
||||||
MockVirtualMachine = Struct.new(
|
MockVirtualMachine = Struct.new(
|
||||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.VirtualMachine.html
|
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.VirtualMachine.html
|
||||||
# From VirtualMachine
|
# From VirtualMachine
|
||||||
:config, :runtime, :snapshot, :summary,
|
:config, :runtime, :snapshot, :summary, :guest,
|
||||||
# From ManagedEntity
|
# From ManagedEntity
|
||||||
:name,
|
:name,
|
||||||
# From RbVmomi::VIM::ManagedEntity
|
# From RbVmomi::VIM::ManagedEntity
|
||||||
# https://github.com/vmware/rbvmomi/blob/master/lib/rbvmomi/vim/ManagedEntity.rb
|
# https://github.com/vmware/rbvmomi/blob/master/lib/rbvmomi/vim/ManagedEntity.rb
|
||||||
:path
|
:path
|
||||||
)
|
) do
|
||||||
|
# From RbVmomi::VIM::VirtualMachine
|
||||||
|
# https://github.com/ManageIQ/rbvmomi2/blob/59a5904031a0d7558f306e8d2a05001f9b6822de/lib/rbvmomi/vim/VirtualMachine.rb#L20
|
||||||
|
def guest_ip
|
||||||
|
g = self.guest
|
||||||
|
if g.ipAddress
|
||||||
|
g.ipAddress
|
||||||
|
else
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
MockVirtualMachineSnapshot = Struct.new(
|
MockVirtualMachineSnapshot = Struct.new(
|
||||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.Snapshot.html
|
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.Snapshot.html
|
||||||
|
|
@ -347,6 +358,12 @@ MockVirtualMachineGuestSummary = Struct.new(
|
||||||
:hostName
|
:hostName
|
||||||
)
|
)
|
||||||
|
|
||||||
|
MockVirtualMachineGuestInfo = Struct.new(
|
||||||
|
# https://developer.vmware.com/apis/1311/vsphere
|
||||||
|
# From Data Object - GuestInfo(vim.vm.GuestInfo)
|
||||||
|
:ipAddress
|
||||||
|
)
|
||||||
|
|
||||||
MockVirtualMachineRuntimeInfo = Struct.new(
|
MockVirtualMachineRuntimeInfo = Struct.new(
|
||||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.RuntimeInfo.html
|
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.RuntimeInfo.html
|
||||||
# From VirtualMachineRuntimeInfo
|
# From VirtualMachineRuntimeInfo
|
||||||
|
|
@ -801,6 +818,7 @@ end
|
||||||
def mock_RbVmomi_VIM_VirtualMachine(options = {})
|
def mock_RbVmomi_VIM_VirtualMachine(options = {})
|
||||||
options[:snapshot_tree] = nil if options[:snapshot_tree].nil?
|
options[:snapshot_tree] = nil if options[:snapshot_tree].nil?
|
||||||
options[:name] = 'VM' + rand(65536).to_s if options[:name].nil?
|
options[:name] = 'VM' + rand(65536).to_s if options[:name].nil?
|
||||||
|
options[:ip] = '192.168.0.2' if options[:ip].nil?
|
||||||
options[:path] = [] if options[:path].nil?
|
options[:path] = [] if options[:path].nil?
|
||||||
|
|
||||||
mock = MockVirtualMachine.new()
|
mock = MockVirtualMachine.new()
|
||||||
|
|
@ -810,11 +828,13 @@ def mock_RbVmomi_VIM_VirtualMachine(options = {})
|
||||||
mock.summary.runtime = MockVirtualMachineRuntimeInfo.new()
|
mock.summary.runtime = MockVirtualMachineRuntimeInfo.new()
|
||||||
mock.summary.guest = MockVirtualMachineGuestSummary.new()
|
mock.summary.guest = MockVirtualMachineGuestSummary.new()
|
||||||
mock.runtime = mock.summary.runtime
|
mock.runtime = mock.summary.runtime
|
||||||
|
mock.guest = MockVirtualMachineGuestInfo.new()
|
||||||
|
|
||||||
mock.name = options[:name]
|
mock.name = options[:name]
|
||||||
mock.summary.guest.hostName = options[:hostname]
|
mock.summary.guest.hostName = options[:hostname]
|
||||||
mock.runtime.bootTime = options[:boottime]
|
mock.runtime.bootTime = options[:boottime]
|
||||||
mock.runtime.powerState = options[:powerstate]
|
mock.runtime.powerState = options[:powerstate]
|
||||||
|
mock.guest.ipAddress = options[:ip]
|
||||||
|
|
||||||
unless options[:snapshot_tree].nil?
|
unless options[:snapshot_tree].nil?
|
||||||
mock.snapshot = MockVirtualMachineSnapshotInfo.new()
|
mock.snapshot = MockVirtualMachineSnapshotInfo.new()
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -50,6 +50,11 @@ describe 'Vmpooler::PoolManager::Provider::VSphere' do
|
||||||
:config:
|
:config:
|
||||||
max_tries: 3
|
max_tries: 3
|
||||||
retry_factor: 10
|
retry_factor: 10
|
||||||
|
:dns_configs:
|
||||||
|
:gcp-clouddns:
|
||||||
|
project: vmpooler-test
|
||||||
|
domain: vmpooler.example.com
|
||||||
|
dns_zone_resource_name: vmpooler-example-com
|
||||||
:providers:
|
:providers:
|
||||||
:vsphere:
|
:vsphere:
|
||||||
server: "vcenter.domain.local"
|
server: "vcenter.domain.local"
|
||||||
|
|
@ -71,6 +76,7 @@ describe 'Vmpooler::PoolManager::Provider::VSphere' do
|
||||||
ready_ttl: 1440
|
ready_ttl: 1440
|
||||||
clone_target: 'cluster1'
|
clone_target: 'cluster1'
|
||||||
provider: 'vsphere'
|
provider: 'vsphere'
|
||||||
|
dns_config: 'gcp-clouddns'
|
||||||
EOT
|
EOT
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -535,7 +541,7 @@ EOT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when VM exists but is missing information' do
|
context 'when VM exists but is missing hostname, boottime, powerstate' do
|
||||||
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
||||||
:name => vmname,
|
:name => vmname,
|
||||||
})
|
})
|
||||||
|
|
@ -560,10 +566,55 @@ EOT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when VM exists but is missing ip' do
|
||||||
|
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
||||||
|
:name => vmname,
|
||||||
|
:ip => '',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
it 'should return empty for ip' do
|
||||||
|
result = subject.get_vm(poolname,vmname)
|
||||||
|
|
||||||
|
expect(result['ip']).to eq('')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when VM exists but contains a self assigned ip' do
|
||||||
|
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
||||||
|
:name => vmname,
|
||||||
|
:ip => '169.254.255.255',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
it 'should return nil ip' do
|
||||||
|
allow(subject).to receive(:sleep)
|
||||||
|
result = subject.get_vm(poolname,vmname)
|
||||||
|
|
||||||
|
expect(result['ip']).to eq(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when VM exists but contains an invalid ip' do
|
||||||
|
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
||||||
|
:name => vmname,
|
||||||
|
:ip => '0.0.0.0',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
it 'should return nil for ip' do
|
||||||
|
allow(subject).to receive(:sleep)
|
||||||
|
result = subject.get_vm(poolname,vmname)
|
||||||
|
|
||||||
|
expect(result['ip']).to eq(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when VM exists and contains all information' do
|
context 'when VM exists and contains all information' do
|
||||||
let(:vm_hostname) { "#{vmname}.demo.local" }
|
let(:vm_hostname) { "#{vmname}.demo.local" }
|
||||||
let(:boot_time) { Time.now }
|
let(:boot_time) { Time.now }
|
||||||
let(:power_state) { 'MockPowerState' }
|
let(:power_state) { 'MockPowerState' }
|
||||||
|
let(:ip) { '192.168.0.2' }
|
||||||
|
|
||||||
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
let(:vm_object) { mock_RbVmomi_VIM_VirtualMachine({
|
||||||
:name => vmname,
|
:name => vmname,
|
||||||
|
|
@ -622,6 +673,11 @@ EOT
|
||||||
expect(result['powerstate']).to eq(power_state)
|
expect(result['powerstate']).to eq(power_state)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should return the ip' do
|
||||||
|
result = subject.get_vm(poolname,vmname)
|
||||||
|
|
||||||
|
expect(result['ip']).to eq(ip)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1056,14 +1112,17 @@ EOT
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#vm_ready?' do
|
describe '#vm_ready?' do
|
||||||
let(:domain) { nil }
|
let(:domain) { 'vmpooler.example.com' }
|
||||||
context 'When a VM is ready' do
|
context 'When a VM is ready' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
|
allow(subject).to receive(:domain).and_return('vmpooler.example.com')
|
||||||
expect(subject).to receive(:open_socket).with(vmname, domain)
|
expect(subject).to receive(:open_socket).with(vmname, domain)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return true' do
|
it 'should return true' do
|
||||||
expect(subject.vm_ready?(poolname,vmname)).to be true
|
redis_connection_pool.with do |redis|
|
||||||
|
expect(subject.vm_ready?(poolname, vmname, redis)).to be true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1075,7 +1134,10 @@ EOT
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return true' do
|
it 'should return true' do
|
||||||
expect(subject.vm_ready?('missing_pool',vmname)).to be true
|
allow(subject).to receive(:domain).and_return('vmpooler.example.com')
|
||||||
|
redis_connection_pool.with do |redis|
|
||||||
|
expect(subject.vm_ready?('missing_pool', vmname, redis)).to be true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1087,7 +1149,9 @@ EOT
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return false' do
|
it 'should return false' do
|
||||||
expect(subject.vm_ready?(poolname,vmname)).to be false
|
redis_connection_pool.with do |redis|
|
||||||
|
expect(subject.vm_ready?(poolname, vmname, redis)).to be false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -1390,7 +1454,7 @@ EOT
|
||||||
let(:TCPSocket) { double('tcpsocket') }
|
let(:TCPSocket) { double('tcpsocket') }
|
||||||
let(:socket) { double('tcpsocket') }
|
let(:socket) { double('tcpsocket') }
|
||||||
let(:hostname) { 'host' }
|
let(:hostname) { 'host' }
|
||||||
let(:domain) { 'domain.local'}
|
let(:domain) { 'vmpooler.example.com' }
|
||||||
let(:default_socket) { 22 }
|
let(:default_socket) { 22 }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
||||||
|
|
@ -3,5 +3,5 @@
|
||||||
# The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment
|
# The container tag should closely match what is used in `docker/Dockerfile` in vmpooler-deployment
|
||||||
docker run -it --rm \
|
docker run -it --rm \
|
||||||
-v $(pwd):/app \
|
-v $(pwd):/app \
|
||||||
jruby:9.4.1.0-jdk11 \
|
jruby:9.4.3.0-jdk11 \
|
||||||
/bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3 && bundle update; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'
|
/bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3 && bundle update; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
||||||
s.files = Dir[ "lib/**/*" ]
|
s.files = Dir[ "lib/**/*" ]
|
||||||
s.require_paths = ["lib"]
|
s.require_paths = ["lib"]
|
||||||
s.add_dependency 'rbvmomi2', '>= 3.1', '< 4.0'
|
s.add_dependency 'rbvmomi2', '>= 3.1', '< 4.0'
|
||||||
s.add_dependency 'vmpooler', '~> 2.4'
|
s.add_dependency 'vmpooler', '~> 3.0'
|
||||||
|
|
||||||
# Testing dependencies
|
# Testing dependencies
|
||||||
s.add_development_dependency 'climate_control', '>= 0.2.0'
|
s.add_development_dependency 'climate_control', '>= 0.2.0'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue