Commit graph

278 commits

Author SHA1 Message Date
Jake Spain
fdbb0f3a77
Add ability to use bind_as with a service account 2023-08-21 07:17:47 -04:00
isaac-hammes
43f085352b (POD-10) Log reason for failed VM checks. 2023-08-17 13:41:15 -07:00
isaac-hammes
46156fd85f Convert Times to strings when being added to redis. 2023-08-08 11:05:55 -07:00
isaac-hammes
30820ec115 (RE-15162) Update Redis gem to version 5 2023-08-07 08:37:17 -07:00
Jake Spain
528e9635d1
exit application if domain setting is used 2023-03-27 21:27:45 -04:00
Jake Spain
93201756a0
Add v3 api and remove v2 2023-03-27 21:27:43 -04:00
Jake Spain
1df7ab6d34
Fix tests based on new dns config 2023-03-27 21:27:41 -04:00
Jake Spain
91248fe23a
Added spec tests for Vmpooler::Dns 2023-03-27 21:27:40 -04:00
Jake Spain
fb80d989c8
Removed api/v1 spec tests 2023-03-27 21:27:39 -04:00
Jake Spain
0119126cd1
Update hostname_shorten and callers 2023-03-27 21:27:36 -04:00
Jake Spain
b1e20a2fc0
Get zone from config and add dns/base_spec 2023-03-27 21:27:30 -04:00
Jake Spain
ac96550f57
Stub out dns provider usage 2023-03-27 21:27:15 -04:00
Samuel Beaulieu
9a9dfce316
adding an api endpoint to print the current full config 2022-03-31 13:16:02 -05:00
Samuel Beaulieu
2e608b7196
spec test domain set at the config and provider levels 2022-03-31 13:15:58 -05:00
Samuel Beaulieu
a2d613782a
remove 'last minute' tcp vm_ready check from the api for pooled vms
the vm_ready methods should be implemented per provider and checking in the api
creates issues since provider code is not available. Removing this for the V2 api
2022-03-31 13:15:56 -05:00
Samuel Beaulieu
dd375b20c3
document the new provider configuration skip_dns_check_before_creating_vm 2022-03-31 13:15:55 -05:00
Samuel Beaulieu
66eb598e4e
tabling this PR for the next sprint 2022-03-31 13:15:54 -05:00
Samuel Beaulieu
e5c477254f
initial review 2022-03-31 13:15:53 -05:00
6b9eb2369f
Connect domain settings to pools, create v2 API 2022-03-31 13:15:52 -05:00
Samuel Beaulieu
c225bafc4a
fix spec tests to include pipelined 2022-03-30 15:52:29 -05:00
Samuel Beaulieu
23efcc4cc0
(maint) Fix EXTRA_CONFIG merge behavior
Before this change if an extra config file had new keys they would get
merged to the main config but if it contained an existing key, like
'providers' it would overwrite the original config.
Adding a library 'deep_merge' to do a more natural merge, where existing keys
get sub-elements added together and arrays are combined like for the
pool configuration.
Adding spec tests around EXTRA_CONFIG as they were missing, by adding
and testing two new extra_config.yaml fixture files
2021-12-23 13:34:33 -06:00
45378d46b9
Ensure all configured providers are loaded
Prior to this, providers that should have been loaded per the
provider_class key of the providers hash were not actually loaded.
2021-12-10 21:05:54 -05:00
7872bfe8fc
Merge pull request #469 from puppetlabs/tag_vm_user
(maint) Adding a provider method tag_vm_user
2021-12-09 13:41:30 -05:00
Samuel Beaulieu
daea25b1d1
(maint) Adding a provider method tag_vm_user
This method should be called only once, when the VM is moved to a running state
which is when the data for the user (if using tokens) is available. In vmpooler
base provider it is a noop method, but the various providers can implement it
to tag or label a running VM with the name of the user who checked it out
2021-12-09 11:13:03 -06:00
Samuel
ea86c2645a
Update lib/vmpooler/providers/base.rb
Co-authored-by: Gene Liverman <gene.liverman+06301990@puppet.com>
2021-12-09 09:32:04 -06:00
Samuel Beaulieu
f6bbef4245
Move vsphere specific methods out of vmpooler
vmpooler has the vsphere provider taken out, moving some vsphere related
methods to the provider:
1) pool_folders
2) get_base_folders
At the same time renaming some configuration and code items
to remove harmful terminology.
purge_unconfigured_folders DEPRECATED, use purge_unconfigured_resources
folder_whitelist DEPRECATED, use resources_allowlist
the above configuration items are still supported but will be removed in
the next major version.
base class method purge_unconfigured_folders was renamed to purge_unconfigured_resources
and requires the equivalent change in the provider classes

abc
2021-12-08 13:02:34 -06:00
bc0a369602
Move vsphere provider to its own gem 2021-12-03 09:41:29 -05:00
a0caa41a54
(DIO-2675) Undo pool size template overrides
This implements a delete method for pooltemplate and poolsize. The API
removes the override from Redis and then adds an entry in Redis that
causes the pool manager to wake up and process the removal of the
override.

To facilitate this, a new variable has been created in lib/vmpooler.rb
to hold a copy of the original / pre-override config. This supplemental
copy of the pools is then indexed for use as a reference.

When pool manager wakes up to process an override removal, it looks up
the pre-override value from the config via the new variables mentioned
above.

Just as with entering overrides, no restart is needed. Template and pool
size changes are logged so that anyone watching or reviewing the logs
can see what happened when. The new API endpoints also return values for
both the pre-revert and post-revert value.
2021-11-04 14:03:06 -04:00
5cd7658ab4
(DIO-2621) Make LDAP encryption configurable
Prior to this, the encryption settings for LDAP auth were hard coded to
start_tls on port 389 with TLSv1. These are still the defaults, as
insecure as they are, so as to not break existing users. This change
facilitates replacing the defaults so that simple_tls over port 636 via
TLS1.2 can be used.
2021-09-14 16:35:32 -04:00
Jake Spain
c88f5d8b5a
Fix missing function when moving metrics from pool_manager to api/v1
Fix dependency function component_to_test for jenkins metrics that was not copied from pool_manager to api/v1 in https://github.com/puppetlabs/vmpooler/pull/455
2021-08-25 09:27:45 -04:00
Jake Spain
c06cfc28f7
Add operation label to user metric and move from manager to api
This adds an "operation" label to the user metrics and moves incrementing from the manager to api, so that the user metrics show when resources are allocated, as well as destroyed. Previously, user metrics were only updated upon destroying a resource.

I think its better suited to increment the metric as part of the api instead of the pool_manger, because it's expected to do so when a user successfully checks out or deletes a VM, but can be problematic when doing so in the provider since it can clone VMs before actually being checked out by a user.
2021-08-13 11:23:10 -04:00
7a1fc24685
Fix regex for ondemand instances
It appears we renamed `/ondemand/` to `/ondemandvm/` at some point and,
as a result, have not been stripping hostnames from that endpoint's
metrics. This has caused issues with metrics collection due a very high
cardinality.
2021-02-02 11:11:17 -05:00
Belen Bustamante
2a6d610b7a Rubocop fix 2020-10-23 17:41:02 -07:00
suckatrash
b2ac53fa76
(DIO-1059) Optionally add snapshot tuning params at clone time 2020-10-16 16:29:29 -07:00
kirby@puppetlabs.com
0ad069b958 (POOLER-191) Add checking for running instances that are not in active
This change adds detection of running instances that are in a running
queue, but have no data in a active queue for the same pool. When this
happens a machine will live forever, impacting the running count, and
preventing the machine from being killed. Without this change running
instances that are not marked as active will live forever.
2020-10-13 14:17:51 -07:00
Belen Bustamante
08132f75bd
Add healthcheck endpoint, spec testing 2020-09-22 12:25:26 -07:00
Samuel Beaulieu
a35d66c606 (POOLER-184) Pool manager retry and exit on failure
Adding a reconnect retry for redis, which by default would retry 10 times,
for a total wait time of ~80 seconds
2020-09-02 11:38:40 -05:00
Belen Bustamante
07d1ca2b2c Add promstats component check 2020-08-29 09:40:29 -07:00
John O'Connor
18988ddc3c (MAINT) Fix Staledns error counter
This was logging the hostname instead of the poolname.
2020-08-21 19:03:19 +01:00
John O'Connor
3050e99fd6 (MAINT) Normalise all tokens for stats
/api/v1/token, /token, /img and /lib endpoints need to be normalised the
same way that /vm and /ondemandvm endpoints are handled.
2020-08-21 17:24:56 +01:00
kirby@puppetlabs.com
c6fdc8d6fd (POOLER-186) Fix template alias evaluation with backend weight of 0
This change fixes template alias evaluation to ensure that the correct
data is set when generating on demand requests for pools that have a
backend weight configured for a value of 0. Without this change vmpooler
will return an empty selection in api for template alias evaluation.

To support this change tests are added that first reproduced the
failure, and then verified that it is resolved with the addition of the
patch. Additionally, test coverage is added to ensure that code paths
that include pickup gem usage are covered.
2020-08-05 16:33:10 -07:00
John O'Connor
0a6ad896f5 (MAINT) Clarity refactor of Prom Stats code
Introducing the Prometheus Stats code into ABS showed that the Clarity
could be improved a bit with better variable naming, some refactoring
to reduce repitition and documenting the Metrics table itself.

Filtering these changes back to the vmpooler code base.
2020-08-05 14:57:48 +01:00
kirby@puppetlabs.com
ef4ca261d0 Fix vmpooler folder purging
This commit updates folder purging references to ensure that provider
name references are referring to the named provider, rather than the
provider type. Without this change folder purging fails because it
cannot identify target folders.
2020-08-03 15:08:03 -07:00
John O'Connor
85ff3f7022 (MAINT) Add optional API Request Logging
This was partially an exercise to use middleware, but also to enable
basic logging for the API by logging all the API calls to the logger.
2020-06-29 19:56:29 +01:00
John O'Connor
a21d8c5642 (POOLER-178) Target Stats for api & manager
Ensure that the correct stats are registered for the Manager and the api
respectively. E.g. all checkout counters are for the api only, whereas
clone times belong to the manager.

Also new ondemand functionality stats weren't registered, so add these
along with missing delete stats.
2020-06-29 19:54:28 +01:00
John O'Connor
8ed8c43970 (POOLER-160) Revise Metrics Classwork
Review changes suggested to revise the Metrics related files into a more
logical class structure.

Also fixup grammar typos in docs strings and any trailing metrics that
have been recently added to vmpooler.
2020-06-29 19:54:28 +01:00
John O'Connor
cb955a1bed (POOLER-177) Filter hostname from API Paths
Use the example provided in the Ruby Client to provide a customised
collector appropriate to log all calls to the API. The customised
filtering is used to replace individual node names and templates
for the /vm and request ID's for the /ondemand endpoints.

This module was failing our rubocop checks so have updated it since
it now forms part of vmpooler.

Separate trapping for litmus jobs is also included so that they don't
interfere with stats from the jenkins pipelines.
2020-06-29 19:53:59 +01:00
John O'Connor
b6dcd77228 (POOLER-170) Revise vmpooler usage stats
Break down the usage stats into smaller groups so as to manage the
number of stat lines collected for Prometheus.

This may need some further revision to filter out Litmus stats, or
otherwise collect litmus usage information.
2020-06-29 19:52:15 +01:00
John O'Connor
72564de4b4 (POOLER-160) Revise connection metrics
The redis pooler connection metric used "metric_prefix" which is
misleading, so split this into connpool_type and connpool_provider.
Also remove some earlier jruby compatibility code to reduce
rebase conflicts when this is rebased on top of Matt's changes.
2020-06-29 19:52:14 +01:00
John O'Connor
bbd76bde4c (POOLER-160) Add Prometheus to pooler startup
This is a re-architect of the vmpooler initialisation code to:
1. Allow an API service for both manager and the api
2. Add the Prometheus endpoints to the web service.
   Needed to change the way the Rack Service is started as instantiating
   using ".New" leads to a failure to initialise the http Stats
   collection.
3. Selectively load the pooler api and/or Prometheus endpoints.
4. Rework API Spec tests for revised API loading. Needed to tidy up the
   initialisation and perform a reset! after each test to avoid "leaks"
   and dependencies between the tests.
2020-06-29 19:52:14 +01:00