Class: Kontena::Callbacks::AuthenticateAfterDeploy

Inherits:
Kontena::Callback show all
Defined in:
lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb

Instance Attribute Summary

Attributes inherited from Kontena::Callback

#command

Instance Method Summary collapse

Methods inherited from Kontena::Callback

callbacks, #initialize, matches_commands, run_callbacks

Constructor Details

This class inherits a constructor from Kontena::Callback

Instance Method Details

#afterObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb', line 7

def after
  extend Kontena::Cli::Common

  require 'securerandom'
  extend Kontena::Cli::Common
  logger.debug { "Command result: #{command.result.inspect}" }
  logger.debug { "Command exit code: #{command.exit_code.inspect}" }
  return unless command.exit_code == 0
  return unless command.result.kind_of?(Hash)
  return unless command.result.has_key?(:public_ip)
  return unless command.result.has_key?(:code)
  return unless command.result.has_key?(:name)

  # If plugins generate self-signed cert, most of the upcoming callbacks will
  # fail without this. This can be made bit more clever once all the plugins
  # return the generated self-signed certificate.
  ENV['SSL_IGNORE_ERRORS'] = 'true'

  # In case there already is a server with the same name add random characters to name
  if config.find_server(command.result[:name])
    command.result[:name] = "#{command.result[:name]}-#{SecureRandom.hex(2)}"
  end

  new_master = Kontena::Cli::Config::Server.new(
    url: "https://#{command.result[:public_ip]}",
    name: command.result[:name]
  )

  retried = false

  # Figure out if HTTPS works, if not, try HTTP
  begin
    logger.debug { "Trying to request / from #{new_master.url}" }
    client = Kontena::Client.new(new_master.url, nil, ignore_ssl_errors: true)
    client.get('/')
  rescue => ex
    logger.debug { "HTTPS test failed: #{ex.class.name} #{ex.message}" }
    unless retried
      new_master.url = "http://#{command.result[:public_ip]}"
      retried = true
      retry
    end
    return
  end

  require 'shellwords'
  cmd = [
    'master', 'login', '--no-login-info' ,'--skip-grid-auto-select', '--verbose',
    '--name', command.result[:name],
    '--code', command.result[:code],
    new_master.url
  ]
  Retriable.retriable do
    logger.debug { "Running: #{cmd}" }
    Kontena.run!(cmd)
  end
end