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:
adamdav 2017-10-06 17:09:31 -07:00 committed by mattkirby
parent 28922df28e
commit 878c93f646
8 changed files with 152 additions and 13 deletions

41
spec/fixtures/vmpooler.yaml vendored Normal file
View 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
View 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

View file

@ -9,3 +9,11 @@ require 'rspec'
require 'vmpooler'
require 'redis'
require 'vmpooler/statsd'
def project_root_dir
File.dirname(File.dirname(__FILE__))
end
def fixtures_dir
File.join(project_root_dir, 'spec', 'fixtures')
end

View file

@ -820,7 +820,7 @@ EOT
it 'should honor the insecure setting' do
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({
:host => credentials['server'],

View 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