cem_acpt 0.3.7-universal-java-17 → 0.4.0-universal-java-17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile.lock +1 -1
 - data/lib/cem_acpt/context.rb +3 -0
 - data/lib/cem_acpt/logging/formatter.rb +6 -10
 - data/lib/cem_acpt/logging.rb +60 -8
 - data/lib/cem_acpt/platform/gcp/cmd.rb +31 -8
 - data/lib/cem_acpt/platform/gcp/compute.rb +2 -1
 - data/lib/cem_acpt/platform/utils/linux.rb +34 -0
 - data/lib/cem_acpt/test_runner/run_handler.rb +12 -1
 - data/lib/cem_acpt/utils.rb +4 -0
 - data/lib/cem_acpt/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: bd740df7227095812b1fa29a9267fdb3d9470567d5990a56799de780cf45d220
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1b53e57a9c26200cdabde23784bbfc0a06cacfd0141636682c9c590669fd697f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a7932858ea4758458609cced16b9049d8ebec80304a0cb13a8aa00ff4787435686129d21c5ef60a13fabc52a4e9e945cf6b1a756a822bd70792e2b34f2df493e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 0dac3c3ce8acee13005e767fcaaaae93b07507f9e969c9faa87d629fc95c242f979ebff79e1249465ad37bd75eb5015b1c722c6bbf68c775738791003767af6c
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/cem_acpt/context.rb
    CHANGED
    
    | 
         @@ -37,6 +37,9 @@ module CemAcpt 
     | 
|
| 
       37 
37 
     | 
    
         
             
                  def new_test_ssh_key
         
     | 
| 
       38 
38 
     | 
    
         
             
                    log('Creating ephemeral SSH key and known hosts file for acceptance test suites...')
         
     | 
| 
       39 
39 
     | 
    
         
             
                    @ssh_priv_key, @ssh_pub_key, @ssh_known_hosts = CemAcpt::Utils::SSH::Ephemeral.create
         
     | 
| 
      
 40 
     | 
    
         
            +
                    unless @ssh_priv_key && @ssh_pub_key && @ssh_known_hosts
         
     | 
| 
      
 41 
     | 
    
         
            +
                      log('Did not create ephemeral SSH key and known hosts file for acceptance test suites. Environment variable CEM_ACPT_TEST_SSH_KEY is set.', :warn)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
       40 
43 
     | 
    
         
             
                    log('Successfully created SSH files.')
         
     | 
| 
       41 
44 
     | 
    
         
             
                    log("SSH private key: #{@ssh_priv_key}", :debug)
         
     | 
| 
       42 
45 
     | 
    
         
             
                    log("SSH public key: #{@ssh_pub_key}", :debug)
         
     | 
| 
         @@ -69,11 +69,11 @@ module CemAcpt 
     | 
|
| 
       69 
69 
     | 
    
         | 
| 
       70 
70 
     | 
    
         
             
                  class GithubActionFormatter < FileFormatter
         
     | 
| 
       71 
71 
     | 
    
         
             
                    SEV_MAP = {
         
     | 
| 
       72 
     | 
    
         
            -
                      'DEBUG' => '::debug',
         
     | 
| 
       73 
     | 
    
         
            -
                      'INFO' => '::notice',
         
     | 
| 
       74 
     | 
    
         
            -
                      'WARN' => '::warning',
         
     | 
| 
       75 
     | 
    
         
            -
                      'ERROR' => '::error',
         
     | 
| 
       76 
     | 
    
         
            -
                      'FATAL' => '::error',
         
     | 
| 
      
 72 
     | 
    
         
            +
                      'DEBUG' => '::debug::',
         
     | 
| 
      
 73 
     | 
    
         
            +
                      'INFO' => '::notice::',
         
     | 
| 
      
 74 
     | 
    
         
            +
                      'WARN' => '::warning::',
         
     | 
| 
      
 75 
     | 
    
         
            +
                      'ERROR' => '::error::',
         
     | 
| 
      
 76 
     | 
    
         
            +
                      'FATAL' => '::error::',
         
     | 
| 
       77 
77 
     | 
    
         
             
                    }.freeze
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                    def initialize
         
     | 
| 
         @@ -84,11 +84,7 @@ module CemAcpt 
     | 
|
| 
       84 
84 
     | 
    
         
             
                    private
         
     | 
| 
       85 
85 
     | 
    
         | 
| 
       86 
86 
     | 
    
         
             
                    def format(severity, _datetime, _progname, msg)
         
     | 
| 
       87 
     | 
    
         
            -
                       
     | 
| 
       88 
     | 
    
         
            -
                        "#{SEV_MAP[severity]}::{#{msg}}\n"
         
     | 
| 
       89 
     | 
    
         
            -
                      else
         
     | 
| 
       90 
     | 
    
         
            -
                        "#{SEV_MAP[severity]} #{msg}\n"
         
     | 
| 
       91 
     | 
    
         
            -
                      end
         
     | 
| 
      
 87 
     | 
    
         
            +
                      "#{SEV_MAP[severity]}#{msg}\n"
         
     | 
| 
       92 
88 
     | 
    
         
             
                    end
         
     | 
| 
       93 
89 
     | 
    
         
             
                  end
         
     | 
| 
       94 
90 
     | 
    
         
             
                end
         
     | 
    
        data/lib/cem_acpt/logging.rb
    CHANGED
    
    | 
         @@ -7,17 +7,17 @@ module CemAcpt 
     | 
|
| 
       7 
7 
     | 
    
         
             
              # Logging for CemAcpt
         
     | 
| 
       8 
8 
     | 
    
         
             
              module Logging
         
     | 
| 
       9 
9 
     | 
    
         
             
                LEVEL_MAP = {
         
     | 
| 
       10 
     | 
    
         
            -
                  'debug' => Logger::DEBUG,
         
     | 
| 
       11 
     | 
    
         
            -
                  'info' => Logger::INFO,
         
     | 
| 
       12 
     | 
    
         
            -
                  'warn' => Logger::WARN,
         
     | 
| 
       13 
     | 
    
         
            -
                  'error' => Logger::ERROR,
         
     | 
| 
       14 
     | 
    
         
            -
                  'fatal' => Logger::FATAL,
         
     | 
| 
       15 
     | 
    
         
            -
                  'unknown' => Logger::UNKNOWN,
         
     | 
| 
      
 10 
     | 
    
         
            +
                  'debug' => ::Logger::DEBUG,
         
     | 
| 
      
 11 
     | 
    
         
            +
                  'info' => ::Logger::INFO,
         
     | 
| 
      
 12 
     | 
    
         
            +
                  'warn' => ::Logger::WARN,
         
     | 
| 
      
 13 
     | 
    
         
            +
                  'error' => ::Logger::ERROR,
         
     | 
| 
      
 14 
     | 
    
         
            +
                  'fatal' => ::Logger::FATAL,
         
     | 
| 
      
 15 
     | 
    
         
            +
                  'unknown' => ::Logger::UNKNOWN,
         
     | 
| 
       16 
16 
     | 
    
         
             
                }
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                # Delegator class for when you want to log to multiple devices
         
     | 
| 
       19 
19 
     | 
    
         
             
                # at the same time, such as STDOUT and a file.
         
     | 
| 
       20 
     | 
    
         
            -
                # @param loggers [ 
     | 
| 
      
 20 
     | 
    
         
            +
                # @param loggers [Logger] one or more instances of CemAcpt::Logging::Logger
         
     | 
| 
       21 
21 
     | 
    
         
             
                class MultiLogger
         
     | 
| 
       22 
22 
     | 
    
         
             
                  def initialize(*loggers)
         
     | 
| 
       23 
23 
     | 
    
         
             
                    @loggers = loggers
         
     | 
| 
         @@ -36,6 +36,58 @@ module CemAcpt 
     | 
|
| 
       36 
36 
     | 
    
         
             
                  end
         
     | 
| 
       37 
37 
     | 
    
         
             
                end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
                # Delagator class for the standard Ruby Logger class.
         
     | 
| 
      
 40 
     | 
    
         
            +
                # This class is used to ensure the Github Actions formatter
         
     | 
| 
      
 41 
     | 
    
         
            +
                # correctly formats the log output when using the standard
         
     | 
| 
      
 42 
     | 
    
         
            +
                # Ruby Logger class methods such as #info, #debug, etc.
         
     | 
| 
      
 43 
     | 
    
         
            +
                class Logger < ::Logger
         
     | 
| 
      
 44 
     | 
    
         
            +
                  def initialize(logdev, shift_age = 0, shift_size = 1_048_576, **kwargs)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    super(logdev, shift_age, shift_size, **kwargs)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    if kwargs[:formatter].is_a?(Formatter::GithubActionFormatter) || ENV['GITHUB_ACTIONS'] || ENV['CI']
         
     | 
| 
      
 47 
     | 
    
         
            +
                      @ci_mode = true
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  def debug(progname = nil, &block)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    unless log_ci_mode('debug', progname, &block)
         
     | 
| 
      
 53 
     | 
    
         
            +
                      super
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def info(progname = nil, &block)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    unless log_ci_mode('info', progname, &block)
         
     | 
| 
      
 59 
     | 
    
         
            +
                      super
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  def warn(progname = nil, &block)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    unless log_ci_mode('warn', progname, &block)
         
     | 
| 
      
 65 
     | 
    
         
            +
                      super
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  def error(progname = nil, &block)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    unless log_ci_mode('error', progname, &block)
         
     | 
| 
      
 71 
     | 
    
         
            +
                      super
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  def fatal(progname = nil, &block)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    unless log_ci_mode('fatal', progname, &block)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      super
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  private
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  def log_ci_mode(severity, progname = nil, &block)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    return false unless @ci_mode
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                    self.<<("::#{severity}::#{progname || (block && block.call) || ''}")
         
     | 
| 
      
 87 
     | 
    
         
            +
                    true
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       39 
91 
     | 
    
         
             
                class << self
         
     | 
| 
       40 
92 
     | 
    
         
             
                  def new_logger(*logdevs, **configs)
         
     | 
| 
       41 
93 
     | 
    
         
             
                    new_configs = current_log_config.merge(configs.reject { |_, v| v.nil? })
         
     | 
| 
         @@ -106,7 +158,7 @@ module CemAcpt 
     | 
|
| 
       106 
158 
     | 
    
         
             
                      logdev: $stdout,
         
     | 
| 
       107 
159 
     | 
    
         
             
                      shift_age: 'o',
         
     | 
| 
       108 
160 
     | 
    
         
             
                      shift_size: 1_048_576,
         
     | 
| 
       109 
     | 
    
         
            -
                      level: Logger::INFO,
         
     | 
| 
      
 161 
     | 
    
         
            +
                      level: ::Logger::INFO,
         
     | 
| 
       110 
162 
     | 
    
         
             
                      progname: 'CemAcpt',
         
     | 
| 
       111 
163 
     | 
    
         
             
                      datetime_format: '%Y%m%dT%H%M%S%z',
         
     | 
| 
       112 
164 
     | 
    
         
             
                      formatter: formatter,
         
     | 
| 
         @@ -67,7 +67,9 @@ module CemAcpt::Platform::Gcp 
     | 
|
| 
       67 
67 
     | 
    
         
             
                def ssh_key
         
     | 
| 
       68 
68 
     | 
    
         
             
                  return @ssh_key unless @ssh_key.nil?
         
     | 
| 
       69 
69 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                  if  
     | 
| 
      
 70 
     | 
    
         
            +
                  if CemAcpt::Platform::Utils::Linux::SSHelper.env_ssh_pri_key?
         
     | 
| 
      
 71 
     | 
    
         
            +
                    @ssh_key = CemAcpt::Platform::Utils::Linux::SSHelper.env_ssh_pri_key
         
     | 
| 
      
 72 
     | 
    
         
            +
                  elsif File.exist?(File.join([ENV['HOME'], '.ssh', 'acpt_test_key']))
         
     | 
| 
       71 
73 
     | 
    
         
             
                    @ssh_key = File.join([ENV['HOME'], '.ssh', 'acpt_test_key'])
         
     | 
| 
       72 
74 
     | 
    
         
             
                  else
         
     | 
| 
       73 
75 
     | 
    
         
             
                    logger.debug("Test SSH key not found at #{File.join([ENV['HOME'], '.ssh', 'acpt_test_key'])}, using default")
         
     | 
| 
         @@ -117,13 +119,14 @@ module CemAcpt::Platform::Gcp 
     | 
|
| 
       117 
119 
     | 
    
         
             
                    CemAcpt::Platform::Utils::Linux::SSHelper.remove_known_host(vm_alias(instance_name), kh_file)
         
     | 
| 
       118 
120 
     | 
    
         
             
                  end
         
     | 
| 
       119 
121 
     | 
    
         
             
                  local_exec("compute instances delete #{instance_name} --quiet")
         
     | 
| 
       120 
     | 
    
         
            -
                rescue StandardError
         
     | 
| 
       121 
     | 
    
         
            -
                  #  
     | 
| 
      
 122 
     | 
    
         
            +
                rescue StandardError => e
         
     | 
| 
      
 123 
     | 
    
         
            +
                  # Just debug logging, otherwise ignore
         
     | 
| 
      
 124 
     | 
    
         
            +
                  logger.debug("Failed to delete known host for #{instance_name}, alias #{vm_alias(instance_name)}: #{e.message}")
         
     | 
| 
       122 
125 
     | 
    
         
             
                end
         
     | 
| 
       123 
126 
     | 
    
         | 
| 
       124 
127 
     | 
    
         
             
                # Returns a Hash describing a GCP VM instance.
         
     | 
| 
       125 
128 
     | 
    
         
             
                def vm_describe(instance_name, out_format: 'json', out_filter: nil)
         
     | 
| 
       126 
     | 
    
         
            -
                  local_exec("compute instances describe #{instance_name}", out_format: out_format, out_filter: out_filter)
         
     | 
| 
      
 129 
     | 
    
         
            +
                  @vm_describe ||= local_exec("compute instances describe #{instance_name}", out_format: out_format, out_filter: out_filter)
         
     | 
| 
       127 
130 
     | 
    
         
             
                end
         
     | 
| 
       128 
131 
     | 
    
         | 
| 
       129 
132 
     | 
    
         
             
                # This function runs the specified command as the currently authenticated user
         
     | 
| 
         @@ -312,7 +315,17 @@ module CemAcpt::Platform::Gcp 
     | 
|
| 
       312 
315 
     | 
    
         
             
                end
         
     | 
| 
       313 
316 
     | 
    
         | 
| 
       314 
317 
     | 
    
         
             
                def gcloud_ssh(instance_name, command, ignore_command_errors: false)
         
     | 
| 
       315 
     | 
    
         
            -
                   
     | 
| 
      
 318 
     | 
    
         
            +
                  cmd = [
         
     | 
| 
      
 319 
     | 
    
         
            +
                    'compute',
         
     | 
| 
      
 320 
     | 
    
         
            +
                    'ssh',
         
     | 
| 
      
 321 
     | 
    
         
            +
                    '--ssh-key-file',
         
     | 
| 
      
 322 
     | 
    
         
            +
                    ssh_key,
         
     | 
| 
      
 323 
     | 
    
         
            +
                    '--tunnel-through-iap',
         
     | 
| 
      
 324 
     | 
    
         
            +
                    "--ssh-flag='-o UserKnownHostsFile=#{ssh_opts[:user_known_hosts_file]}'",
         
     | 
| 
      
 325 
     | 
    
         
            +
                    instance_name,
         
     | 
| 
      
 326 
     | 
    
         
            +
                    "--command='#{command}'",
         
     | 
| 
      
 327 
     | 
    
         
            +
                  ].join(' ')
         
     | 
| 
      
 328 
     | 
    
         
            +
                  local_exec(cmd)
         
     | 
| 
       316 
329 
     | 
    
         
             
                rescue StandardError => e
         
     | 
| 
       317 
330 
     | 
    
         
             
                  raise e unless ignore_command_errors
         
     | 
| 
       318 
331 
     | 
    
         
             
                end
         
     | 
| 
         @@ -322,16 +335,21 @@ module CemAcpt::Platform::Gcp 
     | 
|
| 
       322 
335 
     | 
    
         
             
                end
         
     | 
| 
       323 
336 
     | 
    
         | 
| 
       324 
337 
     | 
    
         
             
                def ssh_all_known_hosts
         
     | 
| 
       325 
     | 
    
         
            -
                  [
         
     | 
| 
      
 338 
     | 
    
         
            +
                  kh = [
         
     | 
| 
       326 
339 
     | 
    
         
             
                    File.join(ENV['HOME'], '.ssh', 'acpt_test_known_hosts'),
         
     | 
| 
       327 
340 
     | 
    
         
             
                    File.join(ENV['HOME'], '.ssh', 'known_hosts'),
         
     | 
| 
       328 
341 
     | 
    
         
             
                    File.join(ENV['HOME'], '.ssh', 'google_compute_known_hosts'),
         
     | 
| 
       329 
342 
     | 
    
         
             
                  ]
         
     | 
| 
      
 343 
     | 
    
         
            +
                  if CemAcpt::Platform::Utils::Linux::SSHelper.env_ssh_known_hosts?
         
     | 
| 
      
 344 
     | 
    
         
            +
                    # Env var takes precedence
         
     | 
| 
      
 345 
     | 
    
         
            +
                    kh.unshift(CemAcpt::Platform::Utils::Linux::SSHelper.env_ssh_known_hosts)
         
     | 
| 
      
 346 
     | 
    
         
            +
                  end
         
     | 
| 
      
 347 
     | 
    
         
            +
                  kh
         
     | 
| 
       330 
348 
     | 
    
         
             
                end
         
     | 
| 
       331 
349 
     | 
    
         | 
| 
       332 
350 
     | 
    
         
             
                # Default options for Net::SSH
         
     | 
| 
       333 
351 
     | 
    
         
             
                def default_ssh_opts
         
     | 
| 
       334 
     | 
    
         
            -
                  {
         
     | 
| 
      
 352 
     | 
    
         
            +
                  dopts = {
         
     | 
| 
       335 
353 
     | 
    
         
             
                    auth_methods: ['publickey'],
         
     | 
| 
       336 
354 
     | 
    
         
             
                    check_host_ip: false,
         
     | 
| 
       337 
355 
     | 
    
         
             
                    compression: true,
         
     | 
| 
         @@ -342,9 +360,14 @@ module CemAcpt::Platform::Gcp 
     | 
|
| 
       342 
360 
     | 
    
         
             
                    non_interactive: true,
         
     | 
| 
       343 
361 
     | 
    
         
             
                    port: 22,
         
     | 
| 
       344 
362 
     | 
    
         
             
                    user: user_name,
         
     | 
| 
       345 
     | 
    
         
            -
                    user_known_hosts_file: File.join(ENV['HOME'], '.ssh', 'acpt_test_known_hosts'),
         
     | 
| 
       346 
363 
     | 
    
         
             
                    verify_host_key: :never,
         
     | 
| 
       347 
364 
     | 
    
         
             
                  }
         
     | 
| 
      
 365 
     | 
    
         
            +
                  if CemAcpt::Platform::Utils::Linux::SSHelper.env_ssh_known_hosts?
         
     | 
| 
      
 366 
     | 
    
         
            +
                    dopts[:user_known_hosts_file] = CemAcpt::Platform::Utils::Linux::SSHelper.env_ssh_known_hosts
         
     | 
| 
      
 367 
     | 
    
         
            +
                  else
         
     | 
| 
      
 368 
     | 
    
         
            +
                    dopts[:user_known_hosts_file] = ssh_all_known_hosts.find { |f| File.exist?(File.expand_path(f)) unless f.nil? }
         
     | 
| 
      
 369 
     | 
    
         
            +
                  end
         
     | 
| 
      
 370 
     | 
    
         
            +
                  dopts
         
     | 
| 
       348 
371 
     | 
    
         
             
                end
         
     | 
| 
       349 
372 
     | 
    
         | 
| 
       350 
373 
     | 
    
         
             
                # Returns a Proxy::Command object to use for the SSH option ProxyCommand.
         
     | 
| 
         @@ -248,7 +248,8 @@ module CemAcpt::Platform::Gcp 
     | 
|
| 
       248 
248 
     | 
    
         
             
                  end
         
     | 
| 
       249 
249 
     | 
    
         
             
                  @cmd.local_exec(create_cmd)
         
     | 
| 
       250 
250 
     | 
    
         
             
                rescue StandardError => e
         
     | 
| 
       251 
     | 
    
         
            -
                   
     | 
| 
      
 251 
     | 
    
         
            +
                  logger.error("Failed to create VM #{name} with command #{create_cmd}: #{e}")
         
     | 
| 
      
 252 
     | 
    
         
            +
                  raise e
         
     | 
| 
       252 
253 
     | 
    
         
             
                end
         
     | 
| 
       253 
254 
     | 
    
         | 
| 
       254 
255 
     | 
    
         
             
                def ready?
         
     | 
| 
         @@ -6,6 +6,40 @@ module CemAcpt 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  module Linux
         
     | 
| 
       7 
7 
     | 
    
         
             
                    # Module provides SSH helper methods for Linux platforms
         
     | 
| 
       8 
8 
     | 
    
         
             
                    class SSHelper
         
     | 
| 
      
 9 
     | 
    
         
            +
                      def self.env_ssh_pri_key
         
     | 
| 
      
 10 
     | 
    
         
            +
                        return unless ENV['CEM_ACPT_SSH_PRI_KEY']
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                        File.expand_path(ENV['CEM_ACPT_SSH_PRI_KEY'])
         
     | 
| 
      
 13 
     | 
    
         
            +
                      end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                      def self.env_ssh_pri_key?
         
     | 
| 
      
 16 
     | 
    
         
            +
                        return false unless env_ssh_pri_key
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                        File.exist?(env_ssh_pri_key)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                      def self.env_ssh_pub_key
         
     | 
| 
      
 22 
     | 
    
         
            +
                        "#{env_ssh_pri_key}.pub" if env_ssh_pri_key
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                      def self.env_ssh_pub_key?
         
     | 
| 
      
 26 
     | 
    
         
            +
                        return false unless env_ssh_pub_key
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                        File.exist?(env_ssh_pub_key)
         
     | 
| 
      
 29 
     | 
    
         
            +
                      end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                      def self.env_ssh_known_hosts
         
     | 
| 
      
 32 
     | 
    
         
            +
                        return unless ENV['CEM_ACPT_SSH_KNOWN_HOSTS']
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                        File.expand_path(ENV['CEM_ACPT_SSH_KNOWN_HOSTS'])
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                      def self.env_ssh_known_hosts?
         
     | 
| 
      
 38 
     | 
    
         
            +
                        return false unless env_ssh_known_hosts
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                        File.exist?(env_ssh_known_hosts)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
       9 
43 
     | 
    
         
             
                      def self.ssh_keygen?
         
     | 
| 
       10 
44 
     | 
    
         
             
                        system('command -v ssh-keygen 2>&1 > /dev/null')
         
     | 
| 
       11 
45 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -133,7 +133,18 @@ module CemAcpt 
     | 
|
| 
       133 
133 
     | 
    
         
             
                  def handle_runner_error_results(runner)
         
     | 
| 
       134 
134 
     | 
    
         
             
                    @logger.error("SUMMARY: Encountered an error with test #{runner.node.test_data[:test_name]} on node #{runner.node.node_name}", no_prefix: true)
         
     | 
| 
       135 
135 
     | 
    
         
             
                    runner.run_result.to_h.each do |k, v|
         
     | 
| 
       136 
     | 
    
         
            -
                       
     | 
| 
      
 136 
     | 
    
         
            +
                      if k == 'standard_error'
         
     | 
| 
      
 137 
     | 
    
         
            +
                        msg = v['message']
         
     | 
| 
      
 138 
     | 
    
         
            +
                        backtrace = v['backtrace']
         
     | 
| 
      
 139 
     | 
    
         
            +
                        @logger.error("#{k.upcase}: #{msg}", no_prefix: true) unless msg.nil?
         
     | 
| 
      
 140 
     | 
    
         
            +
                        @logger.error("BACKTRACE:\n#{backtrace.join("\n")}", no_prefix: true) unless backtrace.nil?
         
     | 
| 
      
 141 
     | 
    
         
            +
                      elsif v.is_a?(Hash)
         
     | 
| 
      
 142 
     | 
    
         
            +
                        v.each do |k2, v2|
         
     | 
| 
      
 143 
     | 
    
         
            +
                          @logger.error("#{k.upcase}: #{k2.upcase}: #{v2}", no_prefix: true)
         
     | 
| 
      
 144 
     | 
    
         
            +
                        end
         
     | 
| 
      
 145 
     | 
    
         
            +
                      else
         
     | 
| 
      
 146 
     | 
    
         
            +
                        @logger.error("#{k.upcase}: #{v}", no_prefix: true)
         
     | 
| 
      
 147 
     | 
    
         
            +
                      end
         
     | 
| 
       137 
148 
     | 
    
         
             
                    end
         
     | 
| 
       138 
149 
     | 
    
         
             
                  end
         
     | 
| 
       139 
150 
     | 
    
         | 
    
        data/lib/cem_acpt/utils.rb
    CHANGED
    
    | 
         @@ -97,12 +97,16 @@ module CemAcpt 
     | 
|
| 
       97 
97 
     | 
    
         
             
                    end
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
       99 
99 
     | 
    
         
             
                    def self.create(keydir: CemAcpt::Utils::SSH.default_keydir)
         
     | 
| 
      
 100 
     | 
    
         
            +
                      return [false, false, false] if ENV['CEM_ACPT_TEST_SSH_KEY'] # Don't create ephemeral keys if this is set
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
       100 
102 
     | 
    
         
             
                      self.ephemeral_keydir = keydir
         
     | 
| 
       101 
103 
     | 
    
         
             
                      @priv_key, @pub_key, @known_hosts = CemAcpt::Utils::SSH.create(PRIV_KEY, keydir: ephemeral_keydir, **CREATE_OPTS)
         
     | 
| 
       102 
104 
     | 
    
         
             
                      [@priv_key, @pub_key, @known_hosts]
         
     | 
| 
       103 
105 
     | 
    
         
             
                    end
         
     | 
| 
       104 
106 
     | 
    
         | 
| 
       105 
107 
     | 
    
         
             
                    def self.clean
         
     | 
| 
      
 108 
     | 
    
         
            +
                      return if ENV['CEM_ACPT_TEST_SSH_KEY']
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
       106 
110 
     | 
    
         
             
                      [@priv_key, @pub_key, @known_hosts].each_with_object([]) do |f, arr|
         
     | 
| 
       107 
111 
     | 
    
         
             
                        next unless f
         
     | 
| 
       108 
112 
     | 
    
         | 
    
        data/lib/cem_acpt/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: cem_acpt
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: universal-java-17
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - puppetlabs
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2023-03- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-03-16 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     |