mirror of
https://github.com/puppetlabs/beaker-vmpooler.git
synced 2026-01-26 02:58:42 -05:00
Compare commits
30 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f055e1202b | ||
|
|
c027b1bcef | ||
|
|
c309bf02ce | ||
|
|
4f5ee09807 | ||
|
|
278515e460 | ||
|
|
6acbc08aba | ||
|
|
d8ea6a2e4c | ||
| 5be58b1e82 | |||
|
|
5d04a41003 | ||
|
|
596e0d83f9 | ||
| e012919f08 | |||
|
|
639255b4de | ||
| 1da71ab4dc | |||
|
|
49f57963bc | ||
| bd4ae1ee8e | |||
|
|
252e92ab4f | ||
| f6bf085eab | |||
| ef72c2399a | |||
|
|
0c4dc910d3 | ||
|
|
79d0880c5b | ||
|
|
d54e825506 | ||
|
|
4063b01ba0 | ||
|
|
a504de0ae4 | ||
|
|
b463b50cbe | ||
|
|
64c827fab0 | ||
|
|
15acdf0d7f | ||
|
|
d1ad5bb083 | ||
|
|
5317f2c1db | ||
|
|
02684546cb | ||
|
|
7a4909805a |
11 changed files with 148 additions and 18 deletions
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: bundler
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
open-pull-requests-limit: 10
|
||||||
39
.github/workflows/release.yml
vendored
Normal file
39
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
name: Release
|
||||||
|
|
||||||
|
on: workflow_dispatch
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.repository == 'puppetlabs/beaker-vmpooler'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Get Version
|
||||||
|
id: gv
|
||||||
|
run: |
|
||||||
|
version=$(grep VERSION lib/beaker-vmpooler/version.rb |rev |cut -d "'" -f2 |rev)
|
||||||
|
echo "version=$version" >> $GITHUB_OUTPUT
|
||||||
|
echo "Found version $version from lib/beaker-vmpooler/version.rb"
|
||||||
|
- name: Tag Release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
tag: ${{ steps.gv.outputs.version }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
generateReleaseNotes: true
|
||||||
|
- name: Install Ruby 2.7
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: '2.7'
|
||||||
|
- name: Build gem
|
||||||
|
run: gem build *.gemspec
|
||||||
|
- name: Publish gem
|
||||||
|
run: |
|
||||||
|
mkdir -p $HOME/.gem
|
||||||
|
touch $HOME/.gem/credentials
|
||||||
|
chmod 0600 $HOME/.gem/credentials
|
||||||
|
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
||||||
|
gem push *.gem
|
||||||
|
env:
|
||||||
|
GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_AUTH_TOKEN }}'
|
||||||
39
.github/workflows/security.yml
vendored
Normal file
39
.github/workflows/security.yml
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
name: Security
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
scan:
|
||||||
|
name: Mend Scanning
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: checkout repo content
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
- name: setup ruby
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: 2.7
|
||||||
|
# setup a package lock if one doesn't exist, otherwise do nothing
|
||||||
|
- name: check lock
|
||||||
|
run: '[ -f "Gemfile.lock" ] && echo "package lock file exists, skipping" || bundle lock'
|
||||||
|
# install java
|
||||||
|
- uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'temurin' # See 'Supported distributions' for available options
|
||||||
|
java-version: '17'
|
||||||
|
# download mend
|
||||||
|
- name: download_mend
|
||||||
|
run: curl -o wss-unified-agent.jar https://unified-agent.s3.amazonaws.com/wss-unified-agent.jar
|
||||||
|
- name: run mend
|
||||||
|
run: java -jar wss-unified-agent.jar
|
||||||
|
env:
|
||||||
|
WS_APIKEY: ${{ secrets.MEND_API_KEY }}
|
||||||
|
WS_WSS_URL: https://saas-eu.whitesourcesoftware.com/agent
|
||||||
|
WS_USERKEY: ${{ secrets.MEND_TOKEN }}
|
||||||
|
WS_PRODUCTNAME: RE
|
||||||
|
WS_PROJECTNAME: ${{ github.event.repository.name }}
|
||||||
26
.github/workflows/testing.yml
vendored
Normal file
26
.github/workflows/testing.yml
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
name: Testing
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
spec_tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
ruby-version:
|
||||||
|
- '2.7'
|
||||||
|
- '3.0'
|
||||||
|
- '3.1'
|
||||||
|
- '3.2'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Ruby
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: ${{ matrix.ruby-version }}
|
||||||
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
||||||
|
- name: Run spec tests
|
||||||
|
run: bundle exec rake test
|
||||||
2
CODEOWNERS
Normal file
2
CODEOWNERS
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
* @puppetlabs/release-engineering
|
||||||
|
|
||||||
11
Gemfile
11
Gemfile
|
|
@ -1,8 +1,6 @@
|
||||||
source ENV['GEM_SOURCE'] || "https://rubygems.org"
|
source ENV['GEM_SOURCE'] || "https://rubygems.org"
|
||||||
|
|
||||||
gemspec
|
gemspec :development_group => :acceptance_testing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def location_for(place, fake_version = nil)
|
def location_for(place, fake_version = nil)
|
||||||
if place =~ /^(git:[^#]*)#(.*)/
|
if place =~ /^(git:[^#]*)#(.*)/
|
||||||
|
|
@ -14,14 +12,13 @@ def location_for(place, fake_version = nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# We don't put beaker in as a test dependency because we
|
# We don't put beaker in as a test dependency because we
|
||||||
# don't want to create a transitive dependency
|
# don't want to create a transitive dependency
|
||||||
group :acceptance_testing do
|
group :acceptance_testing do
|
||||||
gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 3.0')
|
gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '>= 5.0', '< 7')
|
||||||
|
gem "beaker-abs"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if File.exist? "#{__FILE__}.local"
|
||||||
if File.exists? "#{__FILE__}.local"
|
|
||||||
eval(File.read("#{__FILE__}.local"), binding)
|
eval(File.read("#{__FILE__}.local"), binding)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
21
README.md
21
README.md
|
|
@ -4,7 +4,26 @@ Beaker library to use vmpooler hypervisor
|
||||||
|
|
||||||
# How to use this wizardry
|
# How to use this wizardry
|
||||||
|
|
||||||
This is a gem that allows you to use hosts with [vmpooler](vmpooler.md) hypervisor with [beaker](https://github.com/puppetlabs/beaker). This gem is already included as [beaker dependency](https://github.com/puppetlabs/beaker/blob/master/beaker.gemspec#L59) for you, so you don't need to do anything special to use this gem's functionality with beaker.
|
This is a gem that allows you to use hosts with [vmpooler](vmpooler.md) hypervisor with [beaker](https://github.com/puppetlabs/beaker).
|
||||||
|
|
||||||
|
Beaker will automatically load the appropriate hypervisors for any given hosts file, so as long as your project dependencies are satisfied there's nothing else to do. No need to `require` this library in your tests.
|
||||||
|
|
||||||
|
## With Beaker 3.x
|
||||||
|
|
||||||
|
This library is included as a dependency of Beaker 3.x versions, so there's nothing to do.
|
||||||
|
|
||||||
|
## With Beaker 4.x
|
||||||
|
|
||||||
|
As of Beaker 4.0, all hypervisor and DSL extension libraries have been removed and are no longer dependencies. In order to use a specific hypervisor or DSL extension library in your project, you will need to include them alongside Beaker in your Gemfile or project.gemspec. E.g.
|
||||||
|
|
||||||
|
~~~ruby
|
||||||
|
# Gemfile
|
||||||
|
gem 'beaker', '~>4.0'
|
||||||
|
gem 'beaker-vmpooler'
|
||||||
|
# project.gemspec
|
||||||
|
s.add_runtime_dependency 'beaker', '~>4.0'
|
||||||
|
s.add_runtime_dependency 'beaker-vmpooler'
|
||||||
|
~~~
|
||||||
|
|
||||||
# Spec tests
|
# Spec tests
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,8 @@ Gem::Specification.new do |s|
|
||||||
# Testing dependencies
|
# Testing dependencies
|
||||||
s.add_development_dependency 'rspec', '~> 3.0'
|
s.add_development_dependency 'rspec', '~> 3.0'
|
||||||
s.add_development_dependency 'rspec-its'
|
s.add_development_dependency 'rspec-its'
|
||||||
# pin fakefs for Ruby < 2.3
|
s.add_development_dependency 'fakefs', '~> 2.4'
|
||||||
if RUBY_VERSION < "2.3"
|
s.add_development_dependency 'rake', '~> 13.0'
|
||||||
s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14'
|
|
||||||
else
|
|
||||||
s.add_development_dependency 'fakefs', '~> 0.6'
|
|
||||||
end
|
|
||||||
s.add_development_dependency 'rake', '~> 10.1'
|
|
||||||
s.add_development_dependency 'simplecov'
|
s.add_development_dependency 'simplecov'
|
||||||
s.add_development_dependency 'pry', '~> 0.10'
|
s.add_development_dependency 'pry', '~> 0.10'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
module BeakerVmpooler
|
module BeakerVmpooler
|
||||||
VERSION = '1.3.0'
|
VERSION = '1.4.0'
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@ module Beaker
|
||||||
uri = URI.parse(@options['pooling_api'] + '/vm/')
|
uri = URI.parse(@options['pooling_api'] + '/vm/')
|
||||||
|
|
||||||
http = Net::HTTP.new(uri.host, uri.port)
|
http = Net::HTTP.new(uri.host, uri.port)
|
||||||
|
http.use_ssl = uri.instance_of?(URI::HTTPS)
|
||||||
request = Net::HTTP::Post.new(uri.request_uri)
|
request = Net::HTTP::Post.new(uri.request_uri)
|
||||||
|
|
||||||
if @credentials[:vmpooler_token]
|
if @credentials[:vmpooler_token]
|
||||||
|
|
@ -169,7 +170,7 @@ module Beaker
|
||||||
@logger.debug("Retrying provision for vmpooler host after waiting #{wait} second(s)")
|
@logger.debug("Retrying provision for vmpooler host after waiting #{wait} second(s)")
|
||||||
sleep wait
|
sleep wait
|
||||||
waited += wait
|
waited += wait
|
||||||
last_wait, wait = wait, last_wait + wait
|
last_wait, wait = wait, [last_wait + wait, 15].min + rand(5)
|
||||||
retry
|
retry
|
||||||
end
|
end
|
||||||
report_and_raise(@logger, e, 'Vmpooler.provision')
|
report_and_raise(@logger, e, 'Vmpooler.provision')
|
||||||
|
|
@ -185,6 +186,7 @@ module Beaker
|
||||||
uri = URI.parse(@options[:pooling_api] + '/vm/' + h['vmhostname'].split('.')[0])
|
uri = URI.parse(@options[:pooling_api] + '/vm/' + h['vmhostname'].split('.')[0])
|
||||||
|
|
||||||
http = Net::HTTP.new(uri.host, uri.port)
|
http = Net::HTTP.new(uri.host, uri.port)
|
||||||
|
http.use_ssl = uri.instance_of?(URI::HTTPS)
|
||||||
request = Net::HTTP::Put.new(uri.request_uri)
|
request = Net::HTTP::Put.new(uri.request_uri)
|
||||||
|
|
||||||
# merge pre-defined tags with host tags
|
# merge pre-defined tags with host tags
|
||||||
|
|
@ -250,6 +252,7 @@ module Beaker
|
||||||
uri = URI.parse(get_template_url(@options['pooling_api'], name))
|
uri = URI.parse(get_template_url(@options['pooling_api'], name))
|
||||||
|
|
||||||
http = Net::HTTP.new( uri.host, uri.port )
|
http = Net::HTTP.new( uri.host, uri.port )
|
||||||
|
http.use_ssl = uri.instance_of?(URI::HTTPS)
|
||||||
request = Net::HTTP::Delete.new(uri.request_uri)
|
request = Net::HTTP::Delete.new(uri.request_uri)
|
||||||
|
|
||||||
if @credentials[:vmpooler_token]
|
if @credentials[:vmpooler_token]
|
||||||
|
|
@ -277,6 +280,7 @@ module Beaker
|
||||||
uri = URI.parse(@options[:pooling_api] + '/api/v1/vm/' + hostname + '/disk/' + disk_size.to_s)
|
uri = URI.parse(@options[:pooling_api] + '/api/v1/vm/' + hostname + '/disk/' + disk_size.to_s)
|
||||||
|
|
||||||
http = Net::HTTP.new(uri.host, uri.port)
|
http = Net::HTTP.new(uri.host, uri.port)
|
||||||
|
http.use_ssl = uri.instance_of?(URI::HTTPS)
|
||||||
request = Net::HTTP::Post.new(uri.request_uri)
|
request = Net::HTTP::Post.new(uri.request_uri)
|
||||||
request['X-AUTH-TOKEN'] = @credentials[:vmpooler_token]
|
request['X-AUTH-TOKEN'] = @credentials[:vmpooler_token]
|
||||||
|
|
||||||
|
|
@ -309,6 +313,7 @@ module Beaker
|
||||||
uri = URI.parse(@options[:pooling_api] + '/vm/' + hostname)
|
uri = URI.parse(@options[:pooling_api] + '/vm/' + hostname)
|
||||||
|
|
||||||
http = Net::HTTP.new(uri.host, uri.port)
|
http = Net::HTTP.new(uri.host, uri.port)
|
||||||
|
http.use_ssl = uri.instance_of?(URI::HTTPS)
|
||||||
request = Net::HTTP::Get.new(uri.request_uri)
|
request = Net::HTTP::Get.new(uri.request_uri)
|
||||||
|
|
||||||
response = http.request(request)
|
response = http.request(request)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ module Beaker
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
stub_const( "Net", MockNet )
|
stub_const( "Net", MockNet )
|
||||||
|
allow_any_instance_of(MockNet::HTTP).to receive(:use_ssl=)
|
||||||
allow( JSON ).to receive( :parse ) do |arg|
|
allow( JSON ).to receive( :parse ) do |arg|
|
||||||
arg
|
arg
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue