Class: Runner::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/shared_infrastructure/runner/base.rb

Overview

Basic runner for nginx config file generation.

Direct Known Subclasses

ReverseProxy, StaticSite

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#builder_classObject (readonly)

Returns the value of attribute builder_class.



88
89
90
# File 'lib/shared_infrastructure/runner/base.rb', line 88

def builder_class
  @builder_class
end

Instance Method Details

#mainObject



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/shared_infrastructure/runner/base.rb', line 9

def main
  options = process_options
  options.merge!(process_args)

  puts "options: #{options.inspect}" if options[:debug]

  Nginx.prepare_fake_files(options[:domain_name], options[:certificate_domain]) if Nginx.root?

  @builder_class = protocol_factory(options)
  puts "builder_class: #{builder_class.inspect}" if options[:debug]
  builder_class
end

#options_for_config(options) ⇒ Object



22
23
24
# File 'lib/shared_infrastructure/runner/base.rb', line 22

def options_for_config(options)
  options.select { |k, _v| k == :user }
end

#process_argsObject



26
27
28
29
# File 'lib/shared_infrastructure/runner/base.rb', line 26

def process_args
  $stderr.puts "domain required" unless ARGV.size == 1
  { domain_name: ARGV[0] }
end

#process_options(http_builder_class = Nginx::Builder::SiteHttp, https_builder_class = Nginx::Builder::SiteHttps) ⇒ Object



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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/shared_infrastructure/runner/base.rb', line 31

def process_options(http_builder_class = Nginx::Builder::SiteHttp,
  https_builder_class = Nginx::Builder::SiteHttps)
  options = {}
  OptionParser.new do |opts|
    opts.banner = "Usage: [options]"

    opts.on("-c DOMAIN",
      "--certificate-domain DOMAIN",
      "Use the certificate for DOMAIN.") do |certificate_domain|
      options[:certificate_domain] = certificate_domain
    end

    opts.on("-h", "--help", "Prints this help") do
      puts opts
      exit
    end

    opts.on("-d", "--debug", "Print debugging information.") do
      options[:debug] = true
    end

    opts.on("-p PROTOCOL",
      "--protocol PROTOCOL",
      "HTTP|HTTPS. Default: HTTPS if key files exist, else HTTP.") do |protocol|
      options[:protocol] = case protocol
                           when "HTTP"
                             http_builder_class
                           when "HTTPS"
                             https_builder_class
                           else
                             puts opts
                             exit
                           end
    end

    opts.on("-r DIRECTORY",
      "--root DIRECTORY",
      "DIRECTORY. Set a root for files. This options is for debugging.") do |directory|
      Nginx.chroot(directory)
    end

    opts.on("-u USER",
      "--user USER",
      "User to be the owner of certain files. Default: ubuntu.") do |user|
      options[:user] = user
    end

    opts.on("--dhparam KEYSIZE",
      "KEYSIZE. Default: 2048 should be used. This option is for testing.") do |keysize|
      Nginx.dhparam = keysize
    end

    yield opts if block_given?
  end.parse!
  options
end

#protocol_factory(options, http_builder_class = Nginx::Builder::SiteHttp, https_builder_class = Nginx::Builder::SiteHttps) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/shared_infrastructure/runner/base.rb', line 90

def protocol_factory(options,
  http_builder_class = Nginx::Builder::SiteHttp,
  https_builder_class = Nginx::Builder::SiteHttps)
  if options[:protocol]
    options[:protocol]
  else
    certificate_directory = Nginx.certificate_directory(
      options[:certificate_domain] || options[:domain_name]
    )
    if File.exist?(File.join(certificate_directory, "privkey.pem")) &&
       File.exist?(File.join(certificate_directory, "fullchain.pem")) &&
       File.exist?(File.join(certificate_directory, "chain.pem")) &&
       File.exist?(File.join(certificate_directory, "cert.pem"))
      https_builder_class
    else
      http_builder_class
    end
  end
end