Method: Beaker::DSL::InstallUtils#do_install
- Defined in:
- lib/beaker/dsl/install_utils.rb
#do_install(hosts, opts = {}) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Perform a Puppet Enterprise upgrade or install
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 |
# File 'lib/beaker/dsl/install_utils.rb', line 463 def do_install hosts, opts = {} masterless = (defined? ) ? [:masterless] : false opts[:masterless] = masterless # has to pass masterless down for answer generation awareness opts[:type] = opts[:type] || :install unless masterless pre30database = version_is_less(opts[:pe_ver] || database['pe_ver'], '3.0') pre30master = version_is_less(opts[:pe_ver] || master['pe_ver'], '3.0') unless version_is_less(opts[:pe_ver] || master['pe_ver'], '3.4') master['puppetservice'] = 'pe-puppetserver' end end # Set PE distribution for all the hosts, create working dir use_all_tar = ENV['PE_USE_ALL_TAR'] == 'true' hosts.each do |host| host['pe_installer'] ||= 'puppet-enterprise-installer' if host['platform'] !~ /windows|osx/ platform = use_all_tar ? 'all' : host['platform'] version = host['pe_ver'] || opts[:pe_ver] host['dist'] = "puppet-enterprise-#{version}-#{platform}" elsif host['platform'] =~ /osx/ version = host['pe_ver'] || opts[:pe_ver] host['dist'] = "puppet-enterprise-#{version}-#{host['platform']}" elsif host['platform'] =~ /windows/ version = host[:pe_ver] || opts['pe_ver_win'] should_install_64bit = !(version_is_less(version, '3.4')) && host.is_x86_64? && !host['install_32'] && !opts['install_32'] #only install 64bit builds if # - we are on pe version 3.4+ # - we do not have install_32 set on host # - we do not have install_32 set globally if !(version_is_less(version, '4.0')) if should_install_64bit host['dist'] = "puppet-agent-#{version}-x64" else host['dist'] = "puppet-agent-#{version}-x86" end elsif should_install_64bit host['dist'] = "puppet-enterprise-#{version}-x64" else host['dist'] = "puppet-enterprise-#{version}" end end host['working_dir'] = host.tmpdir(Time.new.strftime("%Y-%m-%d_%H.%M.%S")) end fetch_puppet(hosts, opts) install_hosts = hosts.dup unless masterless # If we're installing a database version less than 3.0, ignore the database host install_hosts.delete(database) if pre30database and database != master and database != dashboard end install_hosts.each do |host| if host['platform'] =~ /windows/ on host, installer_cmd(host, opts) if not host.is_cygwin? # HACK: for some reason, post install we need to refresh the connection to make puppet available for execution host.close end else # We only need answers if we're using the classic installer version = host['pe_ver'] || opts[:pe_ver] if host['roles'].include?('frictionless') && (! version_is_less(version, '3.2.0')) # If We're *not* running the classic installer, we want # to make sure the master has packages for us. deploy_frictionless_to_master(host) on host, installer_cmd(host, opts) elsif host['platform'] =~ /osx|eos/ # If we're not frictionless, we need to run the OSX special-case on host, installer_cmd(host, opts) #set the certname and master on host, puppet("config set server #{master}") on host, puppet("config set certname #{host}") #run once to request cert acceptable_codes = host['platform'] =~ /osx/ ? [1] : [0, 1] on host, puppet_agent('-t'), :acceptable_exit_codes => acceptable_codes else answers = Beaker::Answers.create(opts[:pe_ver] || host['pe_ver'], hosts, opts) create_remote_file host, "#{host['working_dir']}/answers", answers.answer_string(host) on host, installer_cmd(host, opts) end end # On each agent, we ensure the certificate is signed then shut down the agent sign_certificate_for(host) unless masterless stop_agent_on(host) end unless masterless # Wait for PuppetDB to be totally up and running (post 3.0 version of pe only) sleep_until_puppetdb_started(database) unless pre30database # Run the agent once to ensure everything is in the dashboard install_hosts.each do |host| on host, puppet_agent('-t'), :acceptable_exit_codes => [0,2] # Workaround for PE-1105 when deploying 3.0.0 # The installer did not respect our database host answers in 3.0.0, # and would cause puppetdb to be bounced by the agent run. By sleeping # again here, we ensure that if that bounce happens during an upgrade # test we won't fail early in the install process. if host['pe_ver'] == '3.0.0' and host == database sleep_until_puppetdb_started(database) end end install_hosts.each do |host| wait_for_host_in_dashboard(host) end if pre30master task = 'nodegroup:add_all_nodes group=default' else task = 'defaultgroup:ensure_default_group' end on dashboard, "/opt/puppet/bin/rake -sf /opt/puppet/share/puppet-dashboard/Rakefile #{task} RAILS_ENV=production" # Now that all hosts are in the dashbaord, run puppet one more # time to configure mcollective on install_hosts, puppet_agent('-t'), :acceptable_exit_codes => [0,2] end end |