mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Allow user to specify a configuration file in VMPOOLER_CONFIG_FILE
variable Previously, there were two ways to configure Vmpooler, either by changing the contents of vmpooler.yaml or by assigning the raw YAML to the VMPOOLER_CONFIG environment variable. This commit adds a new environment variable called VMPOOLER_CONFIG_FILE that can be assigned the name of a config file to use. Also fixes #240 by whitelisting the Symbol class when calling YAML.safe_load in Vmpooler.config.
This commit is contained in:
parent
28922df28e
commit
878c93f646
8 changed files with 152 additions and 13 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -3,6 +3,6 @@
|
||||||
Gemfile.lock
|
Gemfile.lock
|
||||||
Gemfile.local
|
Gemfile.local
|
||||||
vendor
|
vendor
|
||||||
vmpooler.yaml
|
/vmpooler.yaml
|
||||||
.bundle
|
.bundle
|
||||||
coverage
|
coverage
|
||||||
|
|
|
||||||
|
|
@ -62,17 +62,25 @@ C:\vmpooler > $ENV:VMPOOLER_DEBUG = 'true'
|
||||||
|
|
||||||
### `VMPOOLER_CONFIG`
|
### `VMPOOLER_CONFIG`
|
||||||
|
|
||||||
When `VMPOOLER_CONFIG` is set, vmpooler will read its configuration from the content of the environment variable instead of from the `vmpooler.yaml` configuration file.
|
When `VMPOOLER_CONFIG` is set, vmpooler will read its configuration from the content of the environment variable.
|
||||||
|
|
||||||
Note that this variable does not point a different configuration file, but stores the contents of a configuration file.
|
Note that this variable does not point to a different configuration file, but stores the contents of a configuration file. You may use `VMPOOLER_CONFIG_FILE` instead to specify a filename.
|
||||||
|
|
||||||
|
|
||||||
|
### `VMPOOLER_CONFIG_FILE`
|
||||||
|
|
||||||
|
When `VMPOOLER_CONFIG_FILE` is set, vmpooler will read its configuration from the file specified in the environment variable.
|
||||||
|
|
||||||
|
Note that this variable points to a different configuration file, unlike `VMPOOLER_CONFIG`.
|
||||||
|
|
||||||
|
|
||||||
## Setup vmpooler Configuration
|
## Setup vmpooler Configuration
|
||||||
|
|
||||||
You can either create a `vmpooler.yaml` file or set the `VMPOOLER_CONFIG` environment variable with the equivalent content.
|
You can create a `vmpooler.yaml` file, set the `VMPOOLER_CONFIG` environment variable with the equivalent content, or set the `VMPOOLER_CONFIG_FILE` environment variable with the name of another configuration file to use. `VMPOOLER_CONFIG` takes precedence over `VMPOOLER_CONFIG_FILE`.
|
||||||
|
|
||||||
Example minimal configuration file:
|
Example minimal configuration file:
|
||||||
```yaml
|
```yaml
|
||||||
|
|
||||||
---
|
---
|
||||||
:providers:
|
:providers:
|
||||||
:dummy:
|
:dummy:
|
||||||
|
|
|
||||||
|
|
@ -21,17 +21,19 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.config(filepath = 'vmpooler.yaml')
|
def self.config(filepath = 'vmpooler.yaml')
|
||||||
parsed_config = {}
|
# Take the config either from an ENV config variable or from a config file
|
||||||
|
config_string = ENV['VMPOOLER_CONFIG'] || begin
|
||||||
|
# Take the name of the config file either from an ENV variable or from the filepath argument
|
||||||
|
config_file = ENV['VMPOOLER_CONFIG_FILE'] || filepath
|
||||||
|
|
||||||
if ENV['VMPOOLER_CONFIG']
|
# Return the contents of the config file
|
||||||
# Load configuration from ENV
|
File.read(File.expand_path(config_file))
|
||||||
parsed_config = YAML.safe_load(ENV['VMPOOLER_CONFIG'])
|
|
||||||
else
|
|
||||||
# Load the configuration file from disk
|
|
||||||
config_file = File.expand_path(filepath)
|
|
||||||
parsed_config = YAML.load_file(config_file)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Parse the YAML config into a Hash
|
||||||
|
# Whitelist the Symbol class
|
||||||
|
parsed_config = YAML.safe_load(config_string, [Symbol])
|
||||||
|
|
||||||
# Bail out if someone attempts to start vmpooler with dummy authentication
|
# Bail out if someone attempts to start vmpooler with dummy authentication
|
||||||
# without enbaling debug mode.
|
# without enbaling debug mode.
|
||||||
if parsed_config[:auth]['provider'] == 'dummy'
|
if parsed_config[:auth]['provider'] == 'dummy'
|
||||||
|
|
|
||||||
41
spec/fixtures/vmpooler.yaml
vendored
Normal file
41
spec/fixtures/vmpooler.yaml
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
:providers:
|
||||||
|
:dummy:
|
||||||
|
|
||||||
|
:redis:
|
||||||
|
server: 'localhost'
|
||||||
|
|
||||||
|
:auth:
|
||||||
|
provider: dummy
|
||||||
|
|
||||||
|
:tagfilter:
|
||||||
|
url: '(.*)\/'
|
||||||
|
|
||||||
|
:config:
|
||||||
|
site_name: 'vmpooler'
|
||||||
|
# Need to change this on Windows
|
||||||
|
logfile: '/var/log/vmpooler.log'
|
||||||
|
task_limit: 10
|
||||||
|
timeout: 15
|
||||||
|
vm_checktime: 15
|
||||||
|
vm_lifetime: 12
|
||||||
|
vm_lifetime_auth: 24
|
||||||
|
allowed_tags:
|
||||||
|
- 'created_by'
|
||||||
|
- 'project'
|
||||||
|
domain: 'company.com'
|
||||||
|
prefix: 'poolvm-'
|
||||||
|
|
||||||
|
# Uncomment the lines below to suppress metrics to STDOUT
|
||||||
|
# :statsd:
|
||||||
|
# server: 'localhost'
|
||||||
|
# prefix: 'vmpooler'
|
||||||
|
# port: 8125
|
||||||
|
|
||||||
|
:pools:
|
||||||
|
- name: 'pool01'
|
||||||
|
size: 5
|
||||||
|
provider: dummy
|
||||||
|
- name: 'pool02'
|
||||||
|
size: 5
|
||||||
|
provider: dummy
|
||||||
41
spec/fixtures/vmpooler2.yaml
vendored
Normal file
41
spec/fixtures/vmpooler2.yaml
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
:providers:
|
||||||
|
:dummy:
|
||||||
|
|
||||||
|
:redis:
|
||||||
|
server: 'localhost'
|
||||||
|
|
||||||
|
:auth:
|
||||||
|
provider: dummy
|
||||||
|
|
||||||
|
:tagfilter:
|
||||||
|
url: '(.*)\/'
|
||||||
|
|
||||||
|
:config:
|
||||||
|
site_name: 'vmpooler'
|
||||||
|
# Need to change this on Windows
|
||||||
|
logfile: '/var/log/vmpooler.log'
|
||||||
|
task_limit: 10
|
||||||
|
timeout: 15
|
||||||
|
vm_checktime: 15
|
||||||
|
vm_lifetime: 12
|
||||||
|
vm_lifetime_auth: 24
|
||||||
|
allowed_tags:
|
||||||
|
- 'created_by'
|
||||||
|
- 'project'
|
||||||
|
domain: 'company.com'
|
||||||
|
prefix: 'poolvm-'
|
||||||
|
|
||||||
|
# Uncomment the lines below to suppress metrics to STDOUT
|
||||||
|
# :statsd:
|
||||||
|
# server: 'localhost'
|
||||||
|
# prefix: 'vmpooler'
|
||||||
|
# port: 8125
|
||||||
|
|
||||||
|
:pools:
|
||||||
|
- name: 'pool03'
|
||||||
|
size: 5
|
||||||
|
provider: dummy
|
||||||
|
- name: 'pool04'
|
||||||
|
size: 5
|
||||||
|
provider: dummy
|
||||||
|
|
@ -9,3 +9,11 @@ require 'rspec'
|
||||||
require 'vmpooler'
|
require 'vmpooler'
|
||||||
require 'redis'
|
require 'redis'
|
||||||
require 'vmpooler/statsd'
|
require 'vmpooler/statsd'
|
||||||
|
|
||||||
|
def project_root_dir
|
||||||
|
File.dirname(File.dirname(__FILE__))
|
||||||
|
end
|
||||||
|
|
||||||
|
def fixtures_dir
|
||||||
|
File.join(project_root_dir, 'spec', 'fixtures')
|
||||||
|
end
|
||||||
|
|
|
||||||
|
|
@ -820,7 +820,7 @@ EOT
|
||||||
|
|
||||||
it 'should honor the insecure setting' do
|
it 'should honor the insecure setting' do
|
||||||
pending('Resolution of issue https://github.com/puppetlabs/vmpooler/issues/207')
|
pending('Resolution of issue https://github.com/puppetlabs/vmpooler/issues/207')
|
||||||
config[:vsphere][:insecure] = false
|
config[:providers][:vsphere][:insecure] = false
|
||||||
|
|
||||||
expect(RbVmomi::VIM).to receive(:connect).with({
|
expect(RbVmomi::VIM).to receive(:connect).with({
|
||||||
:host => credentials['server'],
|
:host => credentials['server'],
|
||||||
|
|
|
||||||
39
spec/unit/vmpooler_spec.rb
Normal file
39
spec/unit/vmpooler_spec.rb
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'Vmpooler' do
|
||||||
|
describe '.config' do
|
||||||
|
let(:config_file) { File.join(fixtures_dir, 'vmpooler2.yaml') }
|
||||||
|
let(:config) { YAML.load_file(config_file) }
|
||||||
|
|
||||||
|
before(:each) do
|
||||||
|
ENV['VMPOOLER_DEBUG'] = 'true'
|
||||||
|
ENV['VMPOOLER_CONFIG_FILE'] = nil
|
||||||
|
ENV['VMPOOLER_CONFIG'] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when no config is given' do
|
||||||
|
it 'defaults to vmpooler.yaml' do
|
||||||
|
default_config_file = File.join(fixtures_dir, 'vmpooler.yaml')
|
||||||
|
default_config = YAML.load_file(default_config_file)
|
||||||
|
|
||||||
|
Dir.chdir(fixtures_dir) do
|
||||||
|
expect(Vmpooler.config[:pools]).to eq(default_config[:pools])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when config variable is set' do
|
||||||
|
it 'should use the config' do
|
||||||
|
ENV['VMPOOLER_CONFIG'] = config.to_yaml
|
||||||
|
expect(Vmpooler.config[:pools]).to eq(config[:pools])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when config file is set' do
|
||||||
|
it 'should use the file' do
|
||||||
|
ENV['VMPOOLER_CONFIG_FILE'] = config_file
|
||||||
|
expect(Vmpooler.config[:pools]).to eq(config[:pools])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue