diff options
author | John Keiser <jkeiser@opscode.com> | 2014-06-30 11:16:30 -0700 |
---|---|---|
committer | John Keiser <jkeiser@opscode.com> | 2014-06-30 14:34:01 -0700 |
commit | 8def9a480e8bbb9a4182fa1cacc1f248403052d2 (patch) | |
tree | ba5d8f01b2b2d5facd96169a1c5b632850807e02 | |
parent | 79b747ac0bddc9a541fcffdd6bbe9e401c67daf5 (diff) | |
download | chef-8def9a480e8bbb9a4182fa1cacc1f248403052d2.tar.gz |
Move local-mode server connectivity code to Chef::LocalMode
-rw-r--r-- | lib/chef/application.rb | 90 | ||||
-rw-r--r-- | lib/chef/knife.rb | 6 | ||||
-rw-r--r-- | lib/chef/knife/serve.rb | 3 | ||||
-rw-r--r-- | lib/chef/local_mode.rb | 78 |
4 files changed, 101 insertions, 76 deletions
diff --git a/lib/chef/application.rb b/lib/chef/application.rb index c77fcd5ee7..b1d28f618c 100644 --- a/lib/chef/application.rb +++ b/lib/chef/application.rb @@ -21,6 +21,7 @@ require 'socket' require 'chef/config' require 'chef/config_fetcher' require 'chef/exceptions' +require 'chef/local_mode' require 'chef/log' require 'chef/platform' require 'mixlib/cli' @@ -184,82 +185,27 @@ class Chef::Application raise Chef::Exceptions::Application, "#{self.to_s}: you must override run_application" end - def self.setup_server_connectivity - if Chef::Config.chef_zero.enabled - destroy_server_connectivity - - require 'chef_zero/server' - require 'chef/chef_fs/chef_fs_data_store' - require 'chef/chef_fs/config' - - chef_fs = Chef::ChefFS::Config.new.local_fs - chef_fs.write_pretty_json = true - data_store = Chef::ChefFS::ChefFSDataStore.new(chef_fs) - server_options = {} - server_options[:data_store] = data_store - server_options[:log_level] = Chef::Log.level - server_options[:host] = Chef::Config.chef_zero.host - server_options[:port] = Chef::Application.parse_port(Chef::Config.chef_zero.port) - Chef::Log.info("Starting chef-zero on host #{Chef::Config.chef_zero.host}, port #{Chef::Config.chef_zero.port} with repository at #{chef_fs.fs_description}") - @chef_zero_server = ChefZero::Server.new(server_options) - @chef_zero_server.start_background - Chef::Log.info("chef-zero started at #{@chef_zero_server.url}") - Chef::Config.chef_server_url = @chef_zero_server.url - end - end - - def self.chef_zero_server - @chef_zero_server - end - - def self.destroy_server_connectivity - if @chef_zero_server - @chef_zero_server.stop - @chef_zero_server = nil - end - end - # Initializes Chef::Client instance and runs it def run_chef_client(specific_recipes = []) - Chef::Application.setup_server_connectivity - - override_runlist = config[:override_runlist] - if specific_recipes.size > 0 - override_runlist ||= [] - end - @chef_client = Chef::Client.new( - @chef_client_json, - :override_runlist => config[:override_runlist], - :specific_recipes => specific_recipes, - :runlist => config[:runlist] - ) - @chef_client_json = nil - - @chef_client.run - @chef_client = nil - - Chef::Application.destroy_server_connectivity - end + Chef::LocalMode.setup_server_connectivity - def self.parse_port(port) - if port.is_a?(String) - parts = port.split(',') - if parts.size == 1 - a,b = parts[0].split('-',2) - if b - a.to_i.upto(b.to_i) - else - [ a.to_i ] - end - else - array = [] - parts.each do |part| - array += parse_port(part).to_a - end - array + begin + override_runlist = config[:override_runlist] + if specific_recipes.size > 0 + override_runlist ||= [] end - else - port + @chef_client = Chef::Client.new( + @chef_client_json, + :override_runlist => config[:override_runlist], + :specific_recipes => specific_recipes, + :runlist => config[:runlist] + ) + @chef_client_json = nil + + @chef_client.run + @chef_client = nil + ensure + Chef::LocalMode.destroy_server_connectivity end end diff --git a/lib/chef/knife.rb b/lib/chef/knife.rb index f8622975e8..4874f28cd6 100644 --- a/lib/chef/knife.rb +++ b/lib/chef/knife.rb @@ -25,6 +25,7 @@ require 'chef/mixin/convert_to_class_name' require 'chef/mixin/path_sanity' require 'chef/knife/core/subcommand_loader' require 'chef/knife/core/ui' +require 'chef/local_mode' require 'chef/rest' require 'pp' @@ -488,11 +489,11 @@ class Chef ui.error "You need to add a #run method to your knife command before you can use it" end enforce_path_sanity - Chef::Application.setup_server_connectivity + Chef::LocalMode.setup_server_connectivity begin run ensure - Chef::Application.destroy_server_connectivity + Chef::LocalMode.destroy_server_connectivity end rescue Exception => e raise if raise_exception || Chef::Config[:verbosity] == 2 @@ -625,4 +626,3 @@ class Chef end end - diff --git a/lib/chef/knife/serve.rb b/lib/chef/knife/serve.rb index 5b2b521303..15994590cd 100644 --- a/lib/chef/knife/serve.rb +++ b/lib/chef/knife/serve.rb @@ -1,4 +1,5 @@ require 'chef/knife' +require 'chef/local_mode' class Chef class Knife @@ -30,8 +31,8 @@ class Chef end def run + server = Chef::LocalMode.chef_zero_server begin - server = Chef::Application.chef_zero_server output "Serving files from:\n#{server.options[:data_store].chef_fs.fs_description}" server.stop server.start(stdout) # to print header diff --git a/lib/chef/local_mode.rb b/lib/chef/local_mode.rb new file mode 100644 index 0000000000..eac2174c0b --- /dev/null +++ b/lib/chef/local_mode.rb @@ -0,0 +1,78 @@ +# +# Author:: John Keiser (<jkeiser@getchef.com>) +# Copyright:: Copyright (c) 2013 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# 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 'chef/config' + +class Chef + module LocalMode + def self.setup_server_connectivity + if Chef::Config.chef_zero.enabled + destroy_server_connectivity + + require 'chef_zero/server' + require 'chef/chef_fs/chef_fs_data_store' + require 'chef/chef_fs/config' + + chef_fs = Chef::ChefFS::Config.new.local_fs + chef_fs.write_pretty_json = true + data_store = Chef::ChefFS::ChefFSDataStore.new(chef_fs) + server_options = {} + server_options[:data_store] = data_store + server_options[:log_level] = Chef::Log.level + server_options[:host] = Chef::Config.chef_zero.host + server_options[:port] = parse_port(Chef::Config.chef_zero.port) + Chef::Log.info("Starting chef-zero on host #{Chef::Config.chef_zero.host}, port #{Chef::Config.chef_zero.port} with repository at #{chef_fs.fs_description}") + @chef_zero_server = ChefZero::Server.new(server_options) + @chef_zero_server.start_background + Chef::Log.info("chef-zero started at #{@chef_zero_server.url}") + Chef::Config.chef_server_url = @chef_zero_server.url + end + end + + def self.chef_zero_server + @chef_zero_server + end + + def self.destroy_server_connectivity + if @chef_zero_server + @chef_zero_server.stop + @chef_zero_server = nil + end + end + + def self.parse_port(port) + if port.is_a?(String) + parts = port.split(',') + if parts.size == 1 + a,b = parts[0].split('-',2) + if b + a.to_i.upto(b.to_i) + else + [ a.to_i ] + end + else + array = [] + parts.each do |part| + array += parse_port(part).to_a + end + array + end + else + port + end + end + end +end |