summaryrefslogtreecommitdiff
path: root/lib/chef/local_mode.rb
diff options
context:
space:
mode:
authorJohn Keiser <jkeiser@opscode.com>2014-06-30 11:16:30 -0700
committerJohn Keiser <jkeiser@opscode.com>2014-07-07 10:04:59 -0700
commitb658f99957b24bfdf72fb340336d0348fdaf70f5 (patch)
tree0d37b71e4163fed13fc74ff798f4ba6be5a5528f /lib/chef/local_mode.rb
parent56cafd894a96d2e771147663b78126d7fe559d25 (diff)
downloadchef-b658f99957b24bfdf72fb340336d0348fdaf70f5.tar.gz
Move local-mode server connectivity code to Chef::LocalMode
Diffstat (limited to 'lib/chef/local_mode.rb')
-rw-r--r--lib/chef/local_mode.rb78
1 files changed, 78 insertions, 0 deletions
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