Update dev tooling and related docs

This commit is contained in:
Gene Liverman 2022-01-19 14:59:12 -05:00
parent 49822bff31
commit f7eaeedbfc
No known key found for this signature in database
GPG key ID: 3AF83985B6C857C6
21 changed files with 506 additions and 463 deletions

View file

@ -14,19 +14,23 @@ As of version 2.0.0, all providers other than the dummy one are now separate gem
## Installation
### Prerequisites
VMPooler is available as a gem. To use the gem run `gem install vmpooler` or add it to your Gemfile and install via bundler. You will also need to install any needed providers in the same manner.
The recommended method of installation is via the Helm chart located in [puppetlabs/vmpooler-deployment](https://github.com/puppetlabs/vmpooler-deployment). That repository also provides Docker images of VMPooler.
### Dependencies
#### Redis
VMPooler requires a [Redis](http://redis.io/) server. This is the data store used for VMPooler's inventory and queuing services.
### Configuration
#### Other gems
VMPooler itself and the dev environment talked about below require additional Ruby gems to function. You can update the currently required ones for VMPooler by running `./update-gemfile-lock.sh`. The gems for the dev environment can be updated by running `./docker/update-gemfile-lock.sh`. These scripts will utilize the container on the FROM line of the Dockerfile to update the Gemfile.lock in the root of this repo and in the docker folder, respectively.
## Configuration
Configuration for VMPooler may be provided via environment variables, or a configuration file.
#### Note on JRuby 9.2.11.x
### Note on JRuby 9.2.11.x
We have found when running VMPooler on JRuby 9.2.11.x we occasionally encounter a stack overflow error that causes the pool\_manager application component to fail and stop doing work. To address this issue on JRuby 9.2.11.x we recommend setting the JRuby option `invokedynamic.yield=false`. To set this with JRuby 9.2.11.1 you can specify the environment variable `JRUBY_OPTS` with the value `-Xinvokedynamic.yield=false`.
@ -71,39 +75,7 @@ The following YAML configuration sets up two pools, `debian-7-i386` and `debian-
See the provided YAML configuration example, [vmpooler.yaml.example](vmpooler.yaml.example), for additional configuration options and parameters or for supporting multiple providers.
### Running via Docker
A [Dockerfile](/docker/Dockerfile) is included in this repository to allow running VMPooler inside a Docker container. A configuration file can be used via volume mapping, and specifying the destination as the configuration file via environment variables, or the application can be configured with environment variables alone. The Dockerfile provides an entrypoint so you may choose whether to run API, or manager services. The default behavior will run both. To build and run:
```bash
docker build -t vmpooler . && docker run -e VMPOOLER_CONFIG -p 80:4567 -it vmpooler
```
To run only the API and dashboard:
```bash
docker run -p 80:4567 -it vmpooler api
```
To run only the manager component:
```bash
docker run -it vmpooler manager
```
### docker-compose
A docker-compose file is provided to support running VMPooler easily via docker-compose. This is useful for development because your local code is used to build the gem used in the docker-compose environment.
```bash
docker-compose -f docker/docker-compose.yml up
```
### Running Docker inside Vagrant
A Vagrantfile is included in this repository. Please see [vagrant instructions](docs/vagrant.md) for details.
## API and Dashboard
## Components
VMPooler provides an API and web front-end (dashboard) on port `:4567`. See the provided YAML configuration example, [vmpooler.yaml.example](vmpooler.yaml.example), to specify an alternative port to listen on.
@ -129,13 +101,45 @@ A dashboard is provided to offer real-time statistics and historical graphs. It
- [vagrant-vmpooler](https://github.com/briancain/vagrant-vmpooler): Use Vagrant to create and manage your VMPooler instances.
## Development and further documentation
## Development
### docker-compose
A docker-compose file is provided to support running VMPooler and associated tools locally. This is useful for development because your local code is used to build the gem used in the docker-compose environment. The compose environment also pulls in the latest providers via git. Details of this setup are stored in the `docker/` folder.
```bash
docker-compose -f docker/docker-compose.yml build && \
docker-compose -f docker/docker-compose.yml up
```
### Running docker-compose inside Vagrant
A Vagrantfile is included in this repository so as to provide a reproducible development environment.
```bash
vagrant up
vagrant ssh
cd /vagrant
docker-compose -f docker/docker-compose.yml build && \
docker-compose -f docker/docker-compose.yml up
```
The Vagrant environment also contains multiple rubies you can utilize for spec test and the like. You can see a list of the pre-installed ones when you log in as part of the message of the day.
For more information about setting up a development instance of VMPooler or other subjects, see the [docs/](docs) directory.
### Build status
### URLs when using docker-compose
[![Testing](https://github.com/puppetlabs/vmpooler/actions/workflows/testing.yml/badge.svg)](https://github.com/puppetlabs/vmpooler/actions/workflows/testing.yml)
| Endpoint | URL |
|-------------------|-----------------------------------------------------------------------|
| Redis Commander | [http://localhost:8079](http://localhost:8079) |
| API | [http://localhost:8080/api/v1]([http://localhost:8080/api/v1) |
| Dashboard | [http://localhost:8080/dashboard/](http://localhost:8080/dashboard/) |
| Metrics (API) | [http://localhost:8080/prometheus]([http://localhost:8080/prometheus) |
| Metrics (Manager) | [http://localhost:8081/prometheus]([http://localhost:8081/prometheus) |
| Jaeger | [http://localhost:8082](http://localhost:8082) |
Additionally, the Redis instance can be accessed at `localhost:6379`.
## License