Class: ChefApply::Action::InstallChef
- Inherits:
-
Base
- Object
- Base
- ChefApply::Action::InstallChef
show all
- Defined in:
- lib/chef_apply/action/install_chef.rb,
lib/chef_apply/action/install_chef/minimum_chef_version.rb
Defined Under Namespace
Classes: MinimumChefVersion
Instance Attribute Summary
Attributes inherited from Base
#config, #target_host
Instance Method Summary
collapse
Methods inherited from Base
#name, #notify, #run
Constructor Details
#initialize(opts = { check_only: false }) ⇒ InstallChef
25
26
27
|
# File 'lib/chef_apply/action/install_chef.rb', line 25
def initialize(opts = { check_only: false })
super
end
|
Instance Method Details
#download_to_workstation(url_path) ⇒ Object
112
113
114
115
|
# File 'lib/chef_apply/action/install_chef.rb', line 112
def download_to_workstation(url_path)
require_relative "../file_fetcher"
ChefApply::FileFetcher.fetch(url_path)
end
|
#lookup_artifact ⇒ Object
66
67
68
69
70
71
72
|
# File 'lib/chef_apply/action/install_chef.rb', line 66
def lookup_artifact
return @artifact_info if @artifact_info
require "mixlib/install"
c = train_to_mixlib(target_host.platform)
Mixlib::Install.new(c).artifact_info
end
|
29
30
31
32
33
34
35
|
# File 'lib/chef_apply/action/install_chef.rb', line 29
def perform_action
if InstallChef::MinimumChefVersion.check!(target_host, config[:check_only]) == :minimum_version_met
notify(:already_installed)
else
perform_local_install
end
end
|
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/chef_apply/action/install_chef.rb', line 41
def perform_local_install
package = lookup_artifact
notify(:downloading)
local_path = download_to_workstation(package.url)
notify(:uploading)
remote_path = upload_to_target(local_path)
notify(:installing)
target_host.install_package(remote_path)
notify(:install_complete)
end
|
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/chef_apply/action/install_chef.rb', line 52
def perform_remote_install
raise NotImplementedError
end
|
#train_to_mixlib(platform) ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/chef_apply/action/install_chef.rb', line 78
def train_to_mixlib(platform)
opts = {
platform_version: platform.release,
platform: platform.name,
architecture: platform.arch,
product_name: "chef",
product_version: :latest,
channel: :stable,
platform_version_compatibility_mode: true,
}
case platform.name
when /mac_os_x/
if platform.release.to_i >= 17
opts[:platform_version] = "10.13"
else
raise NotImplementedError
end
when /windows/
opts[:platform] = "windows"
when "redhat", "centos"
opts[:platform] = "el"
when "suse"
opts[:platform] = "sles"
when "amazon"
opts[:platform] = "el"
if platform.release.to_i > 2010 opts[:platform_version] = "6"
else
opts[:platform_version] = "7"
end
end
opts
end
|
#upgrading? ⇒ Boolean
37
38
39
|
# File 'lib/chef_apply/action/install_chef.rb', line 37
def upgrading?
@upgrading
end
|
#upload_to_target(local_path) ⇒ Object
117
118
119
120
121
122
|
# File 'lib/chef_apply/action/install_chef.rb', line 117
def upload_to_target(local_path)
installer_dir = target_host.temp_dir
remote_path = File.join(installer_dir, File.basename(local_path))
target_host.upload_file(local_path, remote_path)
remote_path
end
|
#version_to_install ⇒ Object
74
75
76
|
# File 'lib/chef_apply/action/install_chef.rb', line 74
def version_to_install
lookup_artifact.version
end
|