Class: Chef::Provisioning::ConvergenceStrategy::InstallSh

Inherits:
PrecreateChefObjects show all
Defined in:
lib/chef/provisioning/convergence_strategy/install_sh.rb

Constant Summary collapse

@@install_sh_cache =
{}

Instance Attribute Summary collapse

Attributes inherited from Chef::Provisioning::ConvergenceStrategy

#config, #convergence_options

Instance Method Summary collapse

Methods inherited from PrecreateChefObjects

#chef_server, #cleanup_convergence

Methods inherited from Chef::Provisioning::ConvergenceStrategy

#cleanup_convergence

Constructor Details

#initialize(convergence_options, config) ⇒ InstallSh

Returns a new instance of InstallSh.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 11

def initialize(convergence_options, config)
  convergence_options = Cheffish::MergedConfig.new(convergence_options.to_hash, {
    :client_rb_path => '/etc/chef/client.rb',
    :client_pem_path => '/etc/chef/client.pem'
  })
  super(convergence_options, config)
  @client_rb_path ||= convergence_options[:client_rb_path]
  @install_sh_path = convergence_options[:install_sh_path] || '/tmp/chef-install.sh'
  @chef_version = convergence_options[:chef_version]
  @prerelease = convergence_options[:prerelease]
  @install_sh_arguments = convergence_options[:install_sh_arguments]
  @bootstrap_env = convergence_options[:bootstrap_proxy] ? "http_proxy=#{convergence_options[:bootstrap_proxy]} https_proxy=$http_proxy " : ""
  @chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
  @chef_command = convergence_options[:chef_command] || "chef-client"
end

Instance Attribute Details

#bootstrap_envObject (readonly)

Returns the value of attribute bootstrap_env.



32
33
34
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 32

def bootstrap_env
  @bootstrap_env
end

#chef_versionObject (readonly)

Returns the value of attribute chef_version.



28
29
30
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 28

def chef_version
  @chef_version
end

#client_rb_pathObject (readonly)

Returns the value of attribute client_rb_path.



27
28
29
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 27

def client_rb_path
  @client_rb_path
end

#install_sh_argumentsObject (readonly)

Returns the value of attribute install_sh_arguments.



31
32
33
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 31

def install_sh_arguments
  @install_sh_arguments
end

#install_sh_pathObject (readonly)

Returns the value of attribute install_sh_path.



30
31
32
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 30

def install_sh_path
  @install_sh_path
end

#prereleaseObject (readonly)

Returns the value of attribute prerelease.



29
30
31
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 29

def prerelease
  @prerelease
end

Instance Method Details

#converge(action_handler, machine) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 62

def converge(action_handler, machine)
  super

  action_handler.open_stream(machine.node['name']) do |stdout|
    action_handler.open_stream(machine.node['name']) do |stderr|
      command_line = "#{@chef_command} -c #{@client_rb_path}"
      command_line << " -l #{config[:log_level].to_s}" if config[:log_level]
      machine.execute(action_handler, command_line,
        :stream_stdout => stdout,
        :stream_stderr => stderr,
        :timeout => @chef_client_timeout)
    end
  end
end

#setup_convergence(action_handler, machine) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/chef/provisioning/convergence_strategy/install_sh.rb', line 34

def setup_convergence(action_handler, machine)
  super

  opts = {"prerelease" => prerelease}
  if convergence_options[:bootstrap_proxy]
    opts["http_proxy"] = convergence_options[:bootstrap_proxy]
    opts["https_proxy"] = convergence_options[:bootstrap_proxy]
  end

  opts["omnibus_url"] = convergence_options[:install_sh_url] if convergence_options[:install_sh_url]

  if convergence_options[:install_sh_arguments]
    opts['install_flags'] = convergence_options[:install_sh_arguments]
  end

  # Install::ScriptGenerator will use current by default, unless we specify -c stable
  # So we add this install flag unless 'prerelease' was specified, in which case we do not
  if (not opts['install_flags'].nil?) and (not opts['install_flags'].include?('-c ')) and (not opts['install_flags'].include?('-channel ') and (not prerelease))
    opts['install_flags']='' unless opts['install_flags'].nil?
    opts['install_flags']+=' -c stable'
  end

  install_command = Mixlib::Install::ScriptGenerator.new(chef_version, false, opts).install_command
  machine.write_file(action_handler, install_sh_path, install_command, :ensure_dir => true)
  machine.set_attributes(action_handler, install_sh_path, :mode => '0755')
  machine.execute(action_handler, "sh -c #{install_sh_path}")
end