beaker-abs 0.5.0 → 0.6.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
- SHA1:
3
- metadata.gz: 0ade798dfa7ecc40995a45867f76edd7892efa27
4
- data.tar.gz: 75f03ef8b8f0f4db32abefb0f1e6b516471cfbde
2
+ SHA256:
3
+ metadata.gz: 0d6faecffc36e445ec8fecf9fd7a92a4ffbcb6fb41ef755bff6a42438a71df44
4
+ data.tar.gz: 6d46f12b1100a9911850f955e3c3c55100e48b4ab03c01d36cb6466ca862b1c4
5
5
  SHA512:
6
- metadata.gz: 972203984fa9159c68e1ebe383046d5736cfbbdf9f0119c344de836b5fbf74bc15dff21ba33d1d87e2ffa376ba728cbf90d215c09ef0d4f31aafbaad3fe3b366
7
- data.tar.gz: 9859a78c8f31c67223acac3ca3c2d0e4e318603acacf2fad4eabb4c241000b1515d059b0e3d6be588abbed3ca34a726463f3caa986250581821ca7d3a9b32896
6
+ metadata.gz: bd6bf6f23b7faed7d1da6d92d1fd718239bb8b5d186b6f7e2c3eeeeb121dc1e63db0a540e180099fca2c85f880479e368933871f75c068dbdb43e8011b1bdfa3
7
+ data.tar.gz: f168b9d3adcaf60c0daee56d356e772e0aeccd790379730dba7a99c6e2ec511ebf614bf953a6b5d3a0e6c22c063f4bb337ebd2cf11225829f5a391b67941b5d4
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "13:00"
8
+ open-pull-requests-limit: 10
@@ -1,5 +1,6 @@
1
- sudo: false
2
1
  language: ruby
3
2
  rvm:
4
- - 2.1.8
5
- before_install: gem install bundler -v 1.12.3
3
+ - 2.6
4
+ before_install:
5
+ - gem install bundler
6
+
@@ -0,0 +1 @@
1
+ * @puppetlabs/beaker
data/README.md CHANGED
@@ -1,22 +1,21 @@
1
- # BeakerAbs
1
+ # beaker-abs
2
2
 
3
3
  Implements a Beaker hypervisor that makes hosts provisioned by the AlwaysBeScheduling service available to a Beaker run.
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ 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.
8
8
 
9
- ```ruby
10
- gem 'beaker-abs'
11
- ```
12
-
13
- And then execute:
14
-
15
- $ bundle
9
+ 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.
16
10
 
17
- Or install it yourself as:
18
-
19
- $ gem install beaker-abs
11
+ ~~~ruby
12
+ # Gemfile
13
+ gem 'beaker', '~>4.0'
14
+ gem 'beaker-abs'
15
+ # project.gemspec
16
+ s.add_runtime_dependency 'beaker', '~>4.0'
17
+ s.add_runtime_dependency 'beaker-abs'
18
+ ~~~
20
19
 
21
20
  ## Usage
22
21
 
@@ -42,6 +41,15 @@ env ABS_RESOURCE_HOSTS=<data> beaker --hosts hosts.yaml
42
41
  ```
43
42
 
44
43
  Beaker will populate the `vmhostname` property for each host using information provided by the AlwaysBeScheduling service.
44
+ This is typically used in a CI scenario, where the jenkins run-me-maybe plugin is populating the ABS_RESOURCE_HOSTS variable.
45
+
46
+ ### Using vmfloaty
47
+
48
+ If you do not specify a ABS_RESOURCE_HOSTS and request to provision via the beaker options, beaker-abs will fallback to using
49
+ your vmfloaty configuration. By default it will look for the service named 'abs'. The name can also be configured via
50
+ the environment variable ABS_SERVICE_NAME or the top level option in the hosts file abs_service_name. Similarly, the priority defaults to "1" which means
51
+ it will take precedence over CI tests. Be careful not to run a CI test with this option. The priority can be configured via
52
+ the environment variable ABS_SERVICE_PRIORITY or the top level option in the hosts file abs_service_priority.
45
53
 
46
54
  ## Development
47
55
 
@@ -18,7 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.12"
21
+ spec.add_dependency "beaker", "~> 4.0"
22
+ spec.add_dependency "vmfloaty", "~> 1.0.0"
23
+ spec.add_development_dependency "bundler", "~> 2.1"
22
24
  spec.add_development_dependency "rake", "~> 10.0"
23
25
  spec.add_development_dependency "minitest", "~> 5.0"
24
26
 
@@ -1,5 +1,5 @@
1
1
  module BeakerAbs
2
2
  module Version
3
- STRING = '0.5.0'
3
+ STRING = '0.6.0'
4
4
  end
5
5
  end
@@ -1,5 +1,9 @@
1
1
  require 'beaker'
2
2
  require 'json'
3
+ require 'pry-byebug'
4
+ require 'vmfloaty'
5
+ require 'vmfloaty/conf'
6
+ require 'vmfloaty/utils'
3
7
 
4
8
  module Beaker
5
9
  class Abs < Beaker::Hypervisor
@@ -9,7 +13,12 @@ module Beaker
9
13
  @hosts = hosts
10
14
 
11
15
  resource_hosts = ENV['ABS_RESOURCE_HOSTS'] || @options[:abs_resource_hosts]
12
- raise ArgumentError.new("ABS_RESOURCE_HOSTS must be specified when using the Beaker::Abs hypervisor") if resource_hosts.nil?
16
+
17
+ @abs_service_name = ENV['ABS_SERVICE_NAME'] || @options[:abs_service_name] || "abs"
18
+ @abs_service_priority = ENV['ABS_SERVICE_PRIORITY'] || @options[:abs_service_priority] || "1"
19
+
20
+ raise ArgumentError.new("ABS_RESOURCE_HOSTS must be specified when using the Beaker::Abs hypervisor when provisioning") if resource_hosts.nil? && !options[:provision]
21
+ resource_hosts = provision_vms(hosts).to_json if resource_hosts.nil?
13
22
  @resource_hosts = JSON.parse(resource_hosts)
14
23
  end
15
24
 
@@ -74,5 +83,78 @@ module Beaker
74
83
  def cleanup
75
84
  # nothing to do
76
85
  end
86
+
87
+ def provision_vms(hosts)
88
+
89
+ verbose = false
90
+ config = Conf.read_config # get the vmfloaty config file in home dir
91
+
92
+ # TODO: the options object provided by the floaty cli is required in get_service_config()
93
+ # we should make it optional or accept nil
94
+ cli = Object.new
95
+ def cli.service() @abs_service_name end
96
+ def cli.priority() @abs_service_priority end # forces going ahead of queue
97
+ def cli.url() nil end
98
+ def cli.token() nil end
99
+ def cli.user() nil end
100
+
101
+ #the service object is the interfacte to all methods
102
+ abs_service = Service.new(cli, config)
103
+ supported_vm_list = abs_service.list(verbose)
104
+ supported_vm_list = supported_vm_list.reject { |e| e.empty? }
105
+ supported_vm_list = supported_vm_list.reject { |e| e.start_with?("*") }
106
+
107
+ vm_request = generate_floaty_request_strings(hosts, supported_vm_list)
108
+
109
+
110
+ vm_beaker_abs = []
111
+ # Will return a JSON Object like this:
112
+ # {"redhat-7-x86_64"=>["rich-apparition.delivery.puppetlabs.net", "despondent-side.delivery.puppetlabs.net"], "centos-7-x86_64"=>["firmer-vamp.delivery.puppetlabs.net"]}
113
+ os_types = Utils.generate_os_hash(vm_request.split)
114
+ vm_floaty_output = abs_service.retrieve(verbose, os_types)
115
+
116
+
117
+ raise ArgumentError.new("Timed out getting the ABS resources") if vm_floaty_output.nil?
118
+ vm_floaty_output_cleaned = Utils.standardize_hostnames(vm_floaty_output)
119
+ vm_floaty_output_cleaned.each do |os_platform, value|
120
+ # filter any extra key that does not have an Array value
121
+ if !value.is_a?(Array)
122
+ next
123
+ end
124
+ value.each do | hostname |
125
+ # I don't think the engine is being used by the beaker-abs process
126
+ vm_beaker_abs.push({"hostname": hostname, "type": os_platform, "engine":"beaker-abs"})
127
+ end
128
+ end
129
+
130
+ # to do need to figure out what the NSPooler requests are, and combine the output for that with vm_beaker_abs and return that object
131
+ # for now just returning vmpooler abs object
132
+ vm_beaker_abs
133
+ end
134
+
135
+ # Based upon the host file, this method counts the number of each template needed
136
+ # and generates the host=Xnum eg redhat-7-x86_64=2 expected by floaty
137
+ def generate_floaty_request_strings(hosts, supported_vm_list)
138
+ vm_list = {}
139
+
140
+ hosts.each do |host|
141
+ if supported_vm_list.include?(host[:template])
142
+ if vm_list.include?(host[:template])
143
+ vm_list[host[:template]] = vm_list[host[:template]] + 1
144
+ else
145
+ vm_list[host[:template]] = 1
146
+ end
147
+ else
148
+ raise ArgumentError.new("#{host.name} has a template #{host[:template]} that is not found in vmpooler or nspooler")
149
+ end
150
+ end
151
+
152
+ vm_request = ""
153
+ vm_list.each do |key, value|
154
+ vm_request.concat("#{key}=#{value} ")
155
+ end
156
+
157
+ vm_request
158
+ end
77
159
  end
78
160
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker-abs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Cooper
@@ -9,22 +9,50 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-02-15 00:00:00.000000000 Z
12
+ date: 2020-10-08 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: beaker
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '4.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '4.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: vmfloaty
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 1.0.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 1.0.0
14
42
  - !ruby/object:Gem::Dependency
15
43
  name: bundler
16
44
  requirement: !ruby/object:Gem::Requirement
17
45
  requirements:
18
46
  - - "~>"
19
47
  - !ruby/object:Gem::Version
20
- version: '1.12'
48
+ version: '2.1'
21
49
  type: :development
22
50
  prerelease: false
23
51
  version_requirements: !ruby/object:Gem::Requirement
24
52
  requirements:
25
53
  - - "~>"
26
54
  - !ruby/object:Gem::Version
27
- version: '1.12'
55
+ version: '2.1'
28
56
  - !ruby/object:Gem::Dependency
29
57
  name: rake
30
58
  requirement: !ruby/object:Gem::Requirement
@@ -62,12 +90,13 @@ executables: []
62
90
  extensions: []
63
91
  extra_rdoc_files: []
64
92
  files:
93
+ - ".github/dependabot.yml"
65
94
  - ".gitignore"
66
95
  - ".travis.yml"
96
+ - CODEOWNERS
67
97
  - Gemfile
68
98
  - HISTORY.md
69
99
  - LICENSE.txt
70
- - MAINTAINERS
71
100
  - README.md
72
101
  - Rakefile
73
102
  - beaker-abs.gemspec
@@ -93,8 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
122
  - !ruby/object:Gem::Version
94
123
  version: '0'
95
124
  requirements: []
96
- rubyforge_project:
97
- rubygems_version: 2.5.1
125
+ rubygems_version: 3.0.8
98
126
  signing_key:
99
127
  specification_version: 4
100
128
  summary: Let's test Puppet, using hosts provisioned by Always Be Scheduling service.
@@ -1,17 +0,0 @@
1
- {
2
- "version": 1,
3
- "file_format": "This MAINTAINERS file format is described at http://pup.pt/maintainers",
4
- "issues": "https://tickets.puppetlabs.com/browse/QENG/",
5
- "people": [
6
- {
7
- "github": "joshcooper",
8
- "email": "josh@puppet.com",
9
- "name": "Josh Cooper"
10
- },
11
- {
12
- "github": "rick",
13
- "email": "rick@puppet.com",
14
- "name": "Rick Bradley"
15
- }
16
- ]
17
- }