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.

[View source]

93
94
95
# File 'lib/chef/local_mode.rb', line 93

def self.chef_fs
  @chef_fs
end

.chef_zero_serverObject

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

[View source]

88
89
90
# File 'lib/chef/local_mode.rb', line 88

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.

[View source]

98
99
100
101
102
103
# File 'lib/chef/local_mode.rb', line 98

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

.parse_port(port) ⇒ Object

[View source]

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

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.

[View source]

51
52
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
# File 'lib/chef/local_mode.rb', line 51

def self.setup_server_connectivity
  if Chef::Config.chef_zero.enabled
    destroy_server_connectivity

    require "chef_zero/server"
    require_relative "chef_fs/chef_fs_data_store"
    require_relative "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 #{ChefUtils::Dist::Zero::PRODUCT} 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
[View source]

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

def self.with_server_connectivity
  setup_server_connectivity
  begin
    yield
  ensure
    destroy_server_connectivity
  end
end