lib/beaker-pe/install/pe_utils.rb in beaker-pe-2.19.0 vs lib/beaker-pe/install/pe_utils.rb in beaker-pe-3.0.0

- old
+ new

@@ -323,28 +323,10 @@ on host, "cd #{host['working_dir']}; curl -L -O #{path}/#{filename}#{extension}#{curlopts}" end end end - # Determine the build package to download on a sles-11 (Intel) host, install that package onto the host. - # Assumed file name format: puppet-agent-7.29.1.26.gf344eeefa-1.sles11.x86_64.rpm. - # This method should be called after puppet is installed on the master since it relies on the master - # telling it the puppet agent version to form the download URL. - # @param [Host] host The sles-11 host to download and install the package on. - # @param [Hash{Symbol=>Symbol, String}] opts The options - # @api private - def install_rpm_on_sles11_host(host, puppet_agent_ver, opts) - # Since sles11 builds are not available in PE, download from agent-downloads. - agent_downloads_url = "http://agent-downloads.delivery.puppetlabs.net/puppet-agent" - master_aio_version = puppet_fact(master, 'aio_agent_build') - stream = opts[:puppet_collection] || "puppet#{puppet_agent_ver[0]}" - path = "#{agent_downloads_url}/#{puppet_agent_ver}/repos/sles/11/#{stream}/x86_64" - filename = "puppet-agent-#{master_aio_version}-1.sles11.x86_64" - extension = ".rpm" - host.install_package_with_rpm("#{path}/#{filename}#{extension}") - end - #Determine the PE package to download/upload on a windows host, download/upload that package onto the host. #Assumed file name format: puppet-enterprise-3.3.0-rc1-559-g97f0833.msi # @param [Host] host The windows host to download/upload and unpack PE onto # @param [Hash{Symbol=>Symbol, String}] opts The options # @option opts [String] :pe_dir Default directory or URL to pull PE package from @@ -889,236 +871,11 @@ end end end end - # Gets host-specific information for PE promoted puppet-agent packages (Mac version) - # - # @param [Host] host - # @param [String] puppet_collection Name of the puppet collection to use - # @param [Hash{Symbol=>String}] opts Options hash to provide extra values - # - # @return [String, String, String] Host-specific information for packages - # 1. release_path_end Suffix for the release_path. Used on Windows. Check - # {Windows::Pkg#pe_puppet_agent_promoted_package_info} to see usage. - # 2. release_file Path to the file on release build servers - # 3. download_file Filename for the package itself - def pe_puppet_agent_promoted_package_info_mac(host, puppet_collection = nil, opts = {} ) - error_message = "Must provide %s argument to get puppet agent dev package information" - raise ArgumentError, error_message % "puppet_collection" unless puppet_collection - variant, version, arch, _codename = host['platform'].to_array - release_file = "/repos/apple/#{version}/#{puppet_collection}/#{arch}/puppet-agent-*" - - # macOS puppet-agent tarballs haven't always included arch - agent_version = opts[:puppet_agent_version] - agent_version_f = agent_version&.to_f - - download_file = if agent_version_f.nil? || (agent_version_f < 6.28 || (agent_version_f >= 7.0 && agent_version_f < 7.18)) - "puppet-agent-#{variant}-#{version}.tar.gz" - else - "puppet-agent-#{variant}-#{version}-#{arch}.tar.gz" - end - - return '', release_file, download_file - end - - # Gets host-specific information for PE promoted puppet-agent packages (Windows version) - # - # @param [Host] host - # @param [String] puppet_collection Name of the puppet collection to use - # @param [Hash{Symbol=>String}] opts Options hash to provide extra values - # - # @return [String, String, String] Host-specific information for packages - # 1. release_path_end Suffix for the release_path - # 2. release_file Path to the file on release build servers - # 3. download_file Filename for the package itself - def pe_puppet_agent_promoted_package_info_windows(host, _puppet_collection = nil, _opts = {} ) - is_config_32 = host['ruby_arch'] == 'x86' || host['install_32'] || host['install_32'] - should_install_64bit = host.is_x86_64? && !is_config_32 - # only install 64bit builds if - # - we do not have install_32 set on host - # - we do not have install_32 set globally - arch_suffix = should_install_64bit ? '64' : '86' - release_path_end = "/windows" - release_file = "/puppet-agent-x#{arch_suffix}.msi" - download_file = "puppet-agent-x#{arch_suffix}.msi" - return release_path_end, release_file, download_file - end - - # Gets host-specific information for PE promoted puppet-agent packages (Unix version) - # - # @param [Host] host - # @param [String] puppet_collection Name of the puppet collection to use - # @param [Hash{Symbol=>String}] opts Options hash to provide extra values - # - # @return [String, String, String] Host-specific information for packages - # 1. release_path_end Suffix for the release_path. Used on Windows. Check - # {Windows::Pkg#pe_puppet_agent_promoted_package_info} to see usage. - # 2. release_file Path to the file on release build servers - # 3. download_file Filename for the package itself - def pe_puppet_agent_promoted_package_info_unix(host, puppet_collection = nil, _opts = {} ) - error_message = "Must provide %s argument to get puppet agent dev package information" - raise ArgumentError, error_message % "puppet_collection" unless puppet_collection - - variant, version, arch, codename = host['platform'].to_array - case variant - when /^(fedora|el|centos|redhat|opensuse|sles)$/ - variant = ((['centos', 'redhat'].include?(variant)) ? 'el' : variant) - release_file = "/repos/#{variant}/#{version}/#{puppet_collection}/#{arch}/puppet-agent-*.rpm" - download_file = "puppet-agent-#{variant}-#{version}-#{arch}.tar.gz" - when /^(debian|ubuntu|cumulus)$/ - if arch == 'x86_64' - arch = 'amd64' - end - version = version[0,2] + '.' + version[2,2] if (variant.include?('ubuntu') && !version.include?(".")) - release_file = "/repos/apt/#{codename}/pool/#{puppet_collection}/p/puppet-agent/puppet-agent*#{arch}.deb" - download_file = "puppet-agent-#{variant}-#{version}-#{arch}.tar.gz" - when /^solaris$/ - if arch == 'x86_64' - arch = 'i386' - end - release_file = "/repos/solaris/#{version}/#{puppet_collection}/" - download_file = "puppet-agent-#{variant}-#{version}-#{arch}.tar.gz" - else - raise "No pe-promoted installation step for #{variant} yet..." - end - return '', release_file, download_file - end - - def pe_puppet_agent_promoted_package_install_dispatch(host, onhost_copy_base, onhost_copied_download, onhost_copied_file, download_file, _opts) - case host - when Mac::Host - return pe_puppet_agent_promoted_package_install_mac(host, onhost_copy_base, onhost_copied_download, onhost_copied_file, download_file, _opts) - when Unix::Host - return pe_puppet_agent_promoted_package_install_unix(host, onhost_copy_base, onhost_copied_download, onhost_copied_file, download_file, _opts) - end - raise RuntimeError("#{host.class} not one of Beaker::(Mac|Unix)::Host") - end - - # Installs a given PE promoted package on a Mac host - # - # @param [Host] host Host to install package on - # @param [String] onhost_copy_base Base copy directory on the host - # @param [String] onhost_copied_download Downloaded file path on the host - # @param [String] onhost_copied_file Copied file path once un-compressed - # @param [String] download_file File name of the downloaded file - # @param [Hash{Symbol=>String}] opts additional options - # - # @return nil - def pe_puppet_agent_promoted_package_install_mac( - host, onhost_copy_base, onhost_copied_download, onhost_copied_file, _download_file, _opts - ) - host.execute("tar -zxvf #{onhost_copied_download} -C #{onhost_copy_base}") - # move to better location - host.execute("mv #{onhost_copied_file}.dmg .") - host.install_package("puppet-agent-*") - end - - - # Installs a given PE promoted package on a Unix host - # - # @param [Host] host Host to install package on - # @param [String] onhost_copy_base Base copy directory on the host - # @param [String] onhost_copied_download Downloaded file path on the host - # @param [String] onhost_copied_file Copied file path once un-compressed - # @param [String] download_file File name of the downloaded file - # @param [Hash{Symbol=>String}] opts additional options - # - # @return nil - def pe_puppet_agent_promoted_package_install_unix( - host, onhost_copy_base, onhost_copied_download, onhost_copied_file, download_file, _opts - ) - host.uncompress_local_tarball(onhost_copied_download, onhost_copy_base, download_file ) - if /^solaris/.match?(host['platform']) - # above uncompresses the install from .tar.gz -> .p5p into the - # onhost_copied_file directory w/a weird name. We have to read that file - # name from the filesystem, so that we can provide it to install_local... - pkg_filename = host.execute( "ls #{onhost_copied_file}" ) - onhost_copied_file = "#{onhost_copied_file}#{pkg_filename}" - end - - host.install_local_package(onhost_copied_file, onhost_copy_base ) - nil - end - - def pe_puppet_agent_promoted_package_info_dispatch(host, puppet_collection = nil, opts = {}) - case host - when Windows::Host - return pe_puppet_agent_promoted_package_info_windows(host, puppet_collection, opts) - when Mac::Host - return pe_puppet_agent_promoted_package_info_mac(host, puppet_collection, opts) - when Unix::Host - return pe_puppet_agent_promoted_package_info_unix(host, puppet_collection, opts) - end - raise RuntimeError("#{host.class} not one of Beaker::(Windows|Mac|Unix)::Host") - end - - # Install shared repo of the puppet-agent on the given host(s). Downloaded from - # location of the form PE_PROMOTED_BUILDS_URL/PE_VER/puppet-agent/AGENT_VERSION/repo - # - # @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon, - # or a role (String or Symbol) that identifies one or more hosts. - # @param [Hash{Symbol=>String}] opts An options hash - # @option opts [String] :puppet_agent_version The version of puppet-agent to install, defaults to 'latest' - # @option opts [String] :pe_ver The version of PE (will also use host['pe_ver']), defaults to '4.0' - # @option opts [String] :copy_base_local Directory where puppet-agent artifact - # will be stored locally - # (default: 'tmp/repo_configs') - # @option opts [String] :copy_dir_external Directory where puppet-agent - # artifact will be pushed to on the external machine - # (default: '/root') - # @option opts [String] :puppet_collection Defaults to 'PC1' - # @option opts [String] :pe_promoted_builds_url Base URL to pull artifacts from - def install_puppet_agent_pe_promoted_repo_on(hosts, opts) - opts[:puppet_agent_version] ||= 'latest' - - block_on hosts do |host| - pe_ver = host[:pe_ver] || opts[:pe_ver] || '4.0.0-rc1' - opts = sanitize_opts(opts) - opts[:download_url] = - "#{opts[:pe_promoted_builds_url]}/puppet-agent/#{pe_ver}/#{opts[:puppet_agent_version]}/repos" - opts[:copy_base_local] ||= File.join('tmp', 'repo_configs') - opts[:copy_dir_external] ||= host.external_copy_base - opts[:puppet_collection] ||= puppet_collection_for(:puppet_agent, opts[:puppet_agent_version]) - add_role(host, 'aio') # we are installing agent, so we want aio role - release_path = opts[:download_url] - variant, version, arch, codename = host['platform'].to_array - copy_dir_local = File.join(opts[:copy_base_local], variant) - onhost_copy_base = opts[:copy_dir_external] - - release_path_end, release_file, download_file = - pe_puppet_agent_promoted_package_info_dispatch( - host, - opts[:puppet_collection], opts - ) - release_path << release_path_end - - onhost_copied_download = File.join(onhost_copy_base, download_file) - onhost_copied_file = File.join(onhost_copy_base, release_file) - fetch_http_file(release_path, download_file, copy_dir_local) - scp_to host, File.join(copy_dir_local, download_file), onhost_copy_base - - if variant == 'windows' - result = on host, "echo #{onhost_copied_file}" - onhost_copied_file = result.raw_output.chomp - opts = { debug: host[:pe_debug] || opts[:pe_debug] } - # couldn't pull this out, because it's relying on - # {Beaker::DSL::InstallUtils::WindowsUtils} methods, - # which I didn't want to attack right now. TODO - install_msi_on(host, onhost_copied_file, {}, opts) - else - pe_puppet_agent_promoted_package_install_dispatch( - host, - onhost_copy_base, onhost_copied_download, - onhost_copied_file, download_file, opts - ) - end - configure_type_defaults_on(host) - end - end - def generic_install hosts, opts = {} step "Installing PE on a generic set of hosts" masterless = opts[:masterless] opts[:type] = opts[:type] || :install @@ -1161,15 +918,11 @@ :puppet_agent_sha => host[:puppet_agent_sha] || opts[:puppet_agent_sha], :pe_ver => host[:pe_ver] || opts[:pe_ver], :puppet_collection => host[:puppet_collection] || opts[:puppet_collection], :pe_promoted_builds_url => host[:pe_promoted_builds_url] || opts[:pe_promoted_builds_url] } - if host['platform'] =~ /sles-11/ - install_rpm_on_sles11_host(host, install_params[:puppet_agent_version], opts) - else - install_params.delete(:pe_promoted_builds_url) if install_params[:pe_promoted_builds_url].nil? - install_puppet_agent_pe_promoted_repo_on(host, install_params) - end + install_params.delete(:pe_promoted_builds_url) if install_params[:pe_promoted_builds_url].nil? + install_puppet_agent_pe_promoted_repo_on(host, install_params) # 1 since no certificate found and waitforcert disabled acceptable_exit_codes = [0, 1] acceptable_exit_codes << 2 if opts[:type] == :upgrade if masterless configure_type_defaults_on(host)