lib/taste_tester/config.rb (106 lines of code) (raw):

# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2 # Copyright 2013-present Facebook # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require 'mixlib/config' require 'taste_tester/logging' require 'between_meals/util' module TasteTester # Config file parser and config object # Uses Mixlib::Config v1 syntax so it works in Chef10 omnibus... # it's compatible with v2, so it should work in 11 too. module Config extend Mixlib::Config extend TasteTester::Logging extend BetweenMeals::Util repo "#{ENV['HOME']}/ops" repo_type 'auto' base_dir 'chef' cookbook_dirs ['cookbooks'] role_dir 'roles' databag_dir 'databags' role_type 'rb' config_file '/etc/taste-tester-config.rb' plugin_path nil chef_zero_path nil bundle false verbosity Logger::WARN timestamp false user 'root' ref_file "#{ENV['HOME']}/.chef/taste-tester-ref.json" knife_config "#{ENV['HOME']}/.chef/knife-#{ENV['USER']}-taste-tester.rb" checksum_dir "#{ENV['HOME']}/.chef/checksums" skip_repo_checks false chef_client_command 'chef-client' testing_time 3600 chef_port_range [5000, 5500] tunnel_port 4001 timestamp_file '/etc/chef/test_timestamp' use_ssh_tunnels false ssh_command 'ssh' ssh_connect_timeout 5 ssh_cmd_gen_template nil use_ssl true chef_zero_logging true chef_config_path '/etc/chef' chef_config 'client.rb' my_hostname nil track_symlinks false transport 'ssh' no_repo false json false jumps nil windows_target false # Start/End refs for calculating changes in the repo. # - start_ref should be the "master" commit of the repository # - end_ref should be nil to compare with the working set, # or something like '.' to compare with the most recent commit vcs_start_ref_git 'origin/HEAD' vcs_start_ref_hg 'master' vcs_end_ref nil skip_pre_upload_hook false skip_post_upload_hook false skip_pre_test_hook false skip_post_test_hook false skip_repo_checks_hook false def self.cookbooks cookbook_dirs.map do |x| File.join(repo, base_dir, x) end end def self.relative_cookbook_dirs cookbook_dirs.map do |x| base_dir && !base_dir.empty? ? File.join(base_dir, x) : x end end def self.roles File.join(repo, base_dir, role_dir) end def self.relative_role_dir base_dir && !base_dir.empty? ? File.join(base_dir, role_dir) : role_dir end def self.databags File.join(repo, base_dir, databag_dir) end def self.relative_databag_dir if base_dir && !base_dir.empty? File.join(base_dir, databag_dir) else databag_dir end end def self.absolute_base_dir File.join(repo, base_dir) end def self.chef_port require 'taste_tester/state' port_range = ( chef_port_range.first.to_i..chef_port_range.last.to_i ).to_a.shuffle if TasteTester::State.port port_range.unshift(TasteTester::State.port) end port_range.each do |port| unless port_open?(port) return port end end logger.error 'Could not find a free port in range' + " [#{chef_port_range.first}, #{chef_port_range.last}]" exit 1 end def self.testing_end_time TasteTester::Config.testing_until || Time.now + TasteTester::Config.testing_time end end end