Class: ChefApply::Action::InstallChef
- Defined in:
- lib/chef_apply/action/install_chef.rb
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #download_to_workstation(url_path) ⇒ Object
-
#initialize(opts = { check_only: false }) ⇒ InstallChef
constructor
A new instance of InstallChef.
- #lookup_artifact ⇒ Object
- #perform_action ⇒ Object
- #perform_local_install ⇒ Object
- #perform_remote_install ⇒ Object
- #train_to_mixlib(platform) ⇒ Object
- #upgrading? ⇒ Boolean
- #upload_to_target(local_path) ⇒ Object
- #version_to_install ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(opts = { check_only: false }) ⇒ InstallChef
Returns a new instance of InstallChef.
26 27 28 |
# File 'lib/chef_apply/action/install_chef.rb', line 26 def initialize(opts = { check_only: false }) super end |
Instance Method Details
#download_to_workstation(url_path) ⇒ Object
106 107 108 109 |
# File 'lib/chef_apply/action/install_chef.rb', line 106 def download_to_workstation(url_path) require "chef_apply/file_fetcher" ChefApply::FileFetcher.fetch(url_path) end |
#lookup_artifact ⇒ Object
67 68 69 70 71 72 |
# File 'lib/chef_apply/action/install_chef.rb', line 67 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 |
#perform_action ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/chef_apply/action/install_chef.rb', line 30 def perform_action if ChefApply::MinimumChefVersion.check!(target_host, config[:check_only]) == :minimum_version_met notify(:already_installed) else perform_local_install end end |
#perform_local_install ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/chef_apply/action/install_chef.rb', line 42 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 |
#perform_remote_install ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/chef_apply/action/install_chef.rb', line 53 def perform_remote_install # TODO BOOTSTRAP - we'll need to implement this for both platforms # require "mixlib/install" # installer = Mixlib::Install.new({ # platform: "windows", # product_name: "chef", # channel: :stable, # shell_type: :ps1, # version: "13", # }) target_host.run_command! installer.install_command 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 |
# 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 /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 # legacy Amazon version 1 opts[:platform_version] = "6" else opts[:platform_version] = "7" end end opts end |
#upgrading? ⇒ Boolean
38 39 40 |
# File 'lib/chef_apply/action/install_chef.rb', line 38 def upgrading? @upgrading end |
#upload_to_target(local_path) ⇒ Object
111 112 113 114 115 116 |
# File 'lib/chef_apply/action/install_chef.rb', line 111 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 |