Module: Chef::LocalMode

Defined in:
lib/chef/local_mode.rb

Class Method Summary collapse

Class Method Details

.chef_fsObject

Return the chef_fs object for the current chef-zero server.


95
96
97
# File 'lib/chef/local_mode.rb', line 95

def self.chef_fs
  @chef_fs
end

.chef_zero_serverObject

Return the current chef-zero server set up by setup_server_connectivity.


90
91
92
# File 'lib/chef/local_mode.rb', line 90

def self.chef_zero_server
  @chef_zero_server
end

.destroy_server_connectivityObject

If chef_zero_server is non-nil, stop it and remove references to it.


100
101
102
103
104
105
# File 'lib/chef/local_mode.rb', line 100

def self.destroy_server_connectivity
  if @chef_zero_server
    @chef_zero_server.stop
    @chef_zero_server = nil
  end
end

.parse_port(port) ⇒ Object


107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/chef/local_mode.rb', line 107

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

.setup_server_connectivityObject

If Chef::Config.chef_zero.enabled is true, sets up a chef-zero server according to the Chef::Config.chef_zero and path options, and sets chef_server_url to point at it.


53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/chef/local_mode.rb', line 53

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)
    data_store = ChefZero::DataStore::V1ToV2Adapter.new(data_store, "chef")
    server_options = {}
    server_options[:data_store] = data_store
    server_options[:log_level] = Chef::Log.level
    server_options[:osc_compat] = Chef::Config.chef_zero.osc_compat
    server_options[:single_org] = Chef::Config.chef_zero.single_org

    server_options[:host] = Chef::Config.chef_zero.host
    server_options[:port] = parse_port(Chef::Config.chef_zero.port)
    @chef_zero_server = ChefZero::Server.new(server_options)

    if Chef::Config[:listen]
      Chef.deprecated(:local_listen, "Starting local-mode server in deprecated socket mode")
      @chef_zero_server.start_background
    else
      @chef_zero_server.start_socketless
    end

    local_mode_url = @chef_zero_server.local_mode_url

    Chef::Log.info("Started chef-zero at #{local_mode_url} with #{@chef_fs.fs_description}")
    Chef::Config.chef_server_url = local_mode_url
  end
end

.with_server_connectivityObject

Create a chef local server (if the configuration requires one) for the duration of the given block.

# This ...
with_server_connectivity { stuff }

# Is exactly equivalent to this ...
Chef::LocalMode.setup_server_connectivity
begin
  stuff
ensure
  Chef::LocalMode.destroy_server_connectivity
end

41
42
43
44
45
46
47
48
# File 'lib/chef/local_mode.rb', line 41

def self.with_server_connectivity
  setup_server_connectivity
  begin
    yield
  ensure
    destroy_server_connectivity
  end
end