Class: Chef::Config
- Extended by:
- Mixin::ShellOut, Mixlib::Config
- Defined in:
- lib/chef/config.rb
Constant Summary collapse
- PathHelper =
Chef::Util::PathHelper
Constants included from Mixin::ShellOut
Mixin::ShellOut::DEPRECATED_OPTIONS
Class Method Summary collapse
-
._this_file ⇒ Object
Path to this file in the current install.
- .add_event_logger(logger) ⇒ Object
- .add_formatter(name, file_path = nil) ⇒ Object
- .derive_path_from_chef_repo_path(child_path) ⇒ Object
-
.embedded_dir ⇒ Object
If installed via an omnibus installer, this gives the path to the “embedded” directory which contains all of the software packaged with omnibus.
-
.env ⇒ Object
This provides a hook which rspec can stub so that we can avoid twiddling global state in tests.
- .find_chef_repo_path(cwd) ⇒ Object
-
.from_string(string, filename) ⇒ Object
Evaluates the given string as config.
-
.guess_internal_locale ⇒ Object
Chef requires an English-language UTF-8 locale to function properly.
- .inspect ⇒ Object
-
.manage_secret_key ⇒ Object
- Manages the chef secret session key === Returns <newkey>
-
A new or retrieved session key.
-
.path_accessible?(path) ⇒ Boolean
Returns true only if the path exists and is readable and writeable for the user.
- .platform_specific_path(path) ⇒ Object
- .set_defaults_for_nix ⇒ Object
- .set_defaults_for_windows ⇒ Object
- .windows_home_path ⇒ Object
Instance Method Summary collapse
-
#user ⇒ Object
Daemonization Settings ## What user should Chef run as?.
Methods included from Mixin::ShellOut
run_command_compatible_options, shell_out, shell_out!, shell_out_with_systems_locale, shell_out_with_systems_locale!
Class Method Details
._this_file ⇒ Object
Path to this file in the current install.
689 690 691 |
# File 'lib/chef/config.rb', line 689 def self._this_file File.(__FILE__) end |
.add_event_logger(logger) ⇒ Object
81 82 83 |
# File 'lib/chef/config.rb', line 81 def self.add_event_logger(logger) event_handlers << logger end |
.add_formatter(name, file_path = nil) ⇒ Object
77 78 79 |
# File 'lib/chef/config.rb', line 77 def self.add_formatter(name, file_path=nil) formatters << [name, file_path] end |
.derive_path_from_chef_repo_path(child_path) ⇒ Object
146 147 148 149 150 151 152 |
# File 'lib/chef/config.rb', line 146 def self.derive_path_from_chef_repo_path(child_path) if chef_repo_path.kind_of?(String) PathHelper.join(chef_repo_path, child_path) else chef_repo_path.map { |path| PathHelper.join(path, child_path)} end end |
.embedded_dir ⇒ Object
If installed via an omnibus installer, this gives the path to the “embedded” directory which contains all of the software packaged with omnibus. This is used to locate the cacert.pem file on windows.
678 679 680 681 682 683 684 685 686 |
# File 'lib/chef/config.rb', line 678 def self. Pathname.new(_this_file).ascend do |path| if path.basename.to_s == "embedded" return path.to_s end end nil end |
.env ⇒ Object
This provides a hook which rspec can stub so that we can avoid twiddling global state in tests.
543 544 545 |
# File 'lib/chef/config.rb', line 543 def self.env ENV end |
.find_chef_repo_path(cwd) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/chef/config.rb', line 130 def self.find_chef_repo_path(cwd) # In local mode, we auto-discover the repo root by looking for a path with "cookbooks" under it. # This allows us to run config-free. path = cwd until File.directory?(PathHelper.join(path, "cookbooks")) new_path = File.('..', path) if new_path == path Chef::Log.warn("No cookbooks directory found at or above current directory. Assuming #{Dir.pwd}.") return Dir.pwd end path = new_path end Chef::Log.info("Auto-discovered chef repository at #{path}") path end |
.from_string(string, filename) ⇒ Object
Evaluates the given string as config.
filename
is used for context in stacktraces, but doesn’t need to be the name of an actual file.
41 42 43 |
# File 'lib/chef/config.rb', line 41 def self.from_string(string, filename) self.instance_eval(string, filename, 1) end |
.guess_internal_locale ⇒ Object
Chef requires an English-language UTF-8 locale to function properly. We attempt to use the ‘locale -a’ command and search through a list of preferences until we find one that we can use. On Ubuntu systems we should find ‘C.UTF-8’ and be able to use that even if there is no English locale on the server, but Mac, Solaris, AIX, etc do not have that locale. We then try to find an English locale and fall back to ‘C’ if we do not. The choice of fallback is pick-your-poison. If we try to do the work to return a non-US UTF-8 locale then we fail inside of providers when things like ‘svn info’ return Japanese and we can’t parse them. OTOH, if we pick ‘C’ then we will blow up on UTF-8 characters. Between the warn we throw and the Encoding exception that ruby will throw it is more obvious what is broken if we drop UTF-8 by default rather than drop English.
If there is no ‘locale -a’ then we return ‘en_US.UTF-8’ since that is the most commonly available English UTF-8 locale. However, all modern POSIXen should support ‘locale -a’.
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 |
# File 'lib/chef/config.rb', line 628 def self.guess_internal_locale # https://github.com/opscode/chef/issues/2181 # Some systems have the `locale -a` command, but the result has # invalid characters for the default encoding. # # For example, on CentOS 6 with ENV['LANG'] = "en_US.UTF-8", # `locale -a`.split fails with ArgumentError invalid UTF-8 encoding. locales = shell_out_with_systems_locale!("locale -a").stdout.split case when locales.include?('C.UTF-8') 'C.UTF-8' when locales.include?('en_US.UTF-8'), locales.include?('en_US.utf8') 'en_US.UTF-8' when locales.include?('en.UTF-8') 'en.UTF-8' else # Will match en_ZZ.UTF-8, en_ZZ.utf-8, en_ZZ.UTF8, en_ZZ.utf8 guesses = locales.select { |l| l =~ /^en_.*UTF-?8$/i } unless guesses.empty? guessed_locale = guesses.first # Transform into the form en_ZZ.UTF-8 guessed_locale.gsub(/UTF-?8$/i, "UTF-8") else Chef::Log.warn "Please install an English UTF-8 locale for Chef to use, falling back to C locale and disabling UTF-8 support." 'C' end end rescue if Chef::Platform.windows? Chef::Log.debug "Defaulting to locale en_US.UTF-8 on Windows, until it matters that we do something else." else Chef::Log.debug "No usable locale -a command found, assuming you have en_US.UTF-8 installed." end 'en_US.UTF-8' end |
.inspect ⇒ Object
62 63 64 |
# File 'lib/chef/config.rb', line 62 def self.inspect configuration.inspect end |
.manage_secret_key ⇒ Object
Manages the chef secret session key
Returns
- <newkey>
-
A new or retrieved session key
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/chef/config.rb', line 49 def self.manage_secret_key newkey = nil if Chef::FileCache.has_key?("chef_server_cookie_id") newkey = Chef::FileCache.load("chef_server_cookie_id") else chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a newkey = "" 40.times { |i| newkey << chars[rand(chars.size-1)] } Chef::FileCache.store("chef_server_cookie_id", newkey) end newkey end |
.path_accessible?(path) ⇒ Boolean
Returns true only if the path exists and is readable and writeable for the user.
241 242 243 |
# File 'lib/chef/config.rb', line 241 def self.path_accessible?(path) File.exists?(path) && File.readable?(path) && File.writable?(path) end |
.platform_specific_path(path) ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/chef/config.rb', line 66 def self.platform_specific_path(path) path = PathHelper.cleanpath(path) if Chef::Platform.windows? # turns \etc\chef\client.rb and \var\chef\client.rb into C:/chef/client.rb if env['SYSTEMDRIVE'] && path[0] == '\\' && path.split('\\')[2] == 'chef' path = PathHelper.join(env['SYSTEMDRIVE'], path.split('\\', 3)[2]) end end path end |
.set_defaults_for_nix ⇒ Object
521 522 523 524 525 526 527 528 529 530 531 |
# File 'lib/chef/config.rb', line 521 def self.set_defaults_for_nix # Those lists of regular expressions define what chef considers a # valid user and group name # # user/group cannot start with '-', '+' or '~' # user/group cannot contain ':', ',' or non-space-whitespace or null byte # everything else is allowed (UTF-8, spaces, etc) and we delegate to your O/S useradd program to barf or not # copies: http://anonscm.debian.org/viewvc/pkg-shadow/debian/trunk/debian/patches/506_relaxed_usernames?view=markup default :user_valid_regex, [ /^[^-+~:,\t\r\n\f\0]+[^:,\t\r\n\f\0]*$/ ] default :group_valid_regex, [ /^[^-+~:,\t\r\n\f\0]+[^:,\t\r\n\f\0]*$/ ] end |
.set_defaults_for_windows ⇒ Object
510 511 512 513 514 515 516 517 518 519 |
# File 'lib/chef/config.rb', line 510 def self.set_defaults_for_windows # Those lists of regular expressions define what chef considers a # valid user and group name # From http://technet.microsoft.com/en-us/library/cc776019(WS.10).aspx principal_valid_regex_part = '[^"\/\\\\\[\]\:;|=,+*?<>]+' default :user_valid_regex, [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ] default :group_valid_regex, [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ] default :fatal_windows_admin_check, false end |
.windows_home_path ⇒ Object
547 548 549 |
# File 'lib/chef/config.rb', line 547 def self.windows_home_path env['SYSTEMDRIVE'] + env['HOMEPATH'] if env['SYSTEMDRIVE'] && env['HOMEPATH'] end |
Instance Method Details
#user ⇒ Object
Daemonization Settings ## What user should Chef run as?
263 |
# File 'lib/chef/config.rb', line 263 default :user, nil |