summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <jkeiser@opscode.com>2014-06-30 11:16:30 -0700
committerJohn Keiser <jkeiser@opscode.com>2014-06-30 14:34:01 -0700
commit8def9a480e8bbb9a4182fa1cacc1f248403052d2 (patch)
treeba5d8f01b2b2d5facd96169a1c5b632850807e02
parent79b747ac0bddc9a541fcffdd6bbe9e401c67daf5 (diff)
downloadchef-8def9a480e8bbb9a4182fa1cacc1f248403052d2.tar.gz
Move local-mode server connectivity code to Chef::LocalMode
-rw-r--r--lib/chef/application.rb90
-rw-r--r--lib/chef/knife.rb6
-rw-r--r--lib/chef/knife/serve.rb3
-rw-r--r--lib/chef/local_mode.rb78
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