Class: Hako::Scripts::NginxFront

Inherits:
Hako::Script show all
Defined in:
lib/hako/scripts/nginx_front.rb

Defined Under Namespace

Classes: Generator, S3Config

Instance Method Summary collapse

Methods inherited from Hako::Script

#after_remove, #deploy_failed, #deploy_finished, #initialize, #oneshot_finished, #oneshot_started, #oneshot_starting, #remove_starting, #rollback_finished, #rollback_started, #rollback_starting

Constructor Details

This class inherits a constructor from Hako::Script

Instance Method Details

#configure(options) ⇒ nil (private)

Parameters:

  • options (Hash)

Returns:

  • (nil)


58
59
60
61
62
63
64
# File 'lib/hako/scripts/nginx_front.rb', line 58

def configure(options)
  super
  @options = options
  @options['locations'] ||= { '/' => {} }
  @backend = options.fetch('backend', 'app')
  @s3 = S3Config.new(options.fetch('s3'))
end

#deploy_started(containers, front_port) ⇒ nil

Parameters:

  • containers (Hash<String, Container>)
  • front_port (Fixnum)

Returns:

  • (nil)


42
43
44
45
46
47
48
49
50
51
52
# File 'lib/hako/scripts/nginx_front.rb', line 42

def deploy_started(containers, front_port)
  front = containers.fetch('front')
  if front_port.nil?
    # Links and extraHosts are not supported when networkMode=awsvpc (i.e., --network=container).
  else
    front.links << link_app
  end
  front.definition['port_mappings'] << port_mapping(front_port)
  upload_config(generate_config(backend_host: front_port.nil? ? 'localhost' : 'backend'))
  Hako.logger.info "Uploaded front configuration to s3://#{@s3.bucket}/#{@s3.key(@app.id)}"
end

#deploy_starting(containers) ⇒ nil

Parameters:

Returns:

  • (nil)


30
31
32
33
34
35
36
37
# File 'lib/hako/scripts/nginx_front.rb', line 30

def deploy_starting(containers)
  front = containers.fetch('front')
  front.definition['env'].merge!(
    'AWS_DEFAULT_REGION' => @s3.region,
    'S3_CONFIG_BUCKET' => @s3.bucket,
    'S3_CONFIG_KEY' => @s3.key(@app.id),
  )
end

#generate_config(backend_host:) ⇒ String (private)

Returns:

  • (String)


78
79
80
# File 'lib/hako/scripts/nginx_front.rb', line 78

def generate_config(backend_host:)
  Generator.new(@options, backend_host: backend_host).render
end

Returns:

  • (String)


67
68
69
# File 'lib/hako/scripts/nginx_front.rb', line 67

def link_app
  "#{@backend}:backend"
end

#port_mapping(front_port) ⇒ Hash (private)

Parameters:

  • front_port (Fixnum)

Returns:

  • (Hash)


73
74
75
# File 'lib/hako/scripts/nginx_front.rb', line 73

def port_mapping(front_port)
  { 'container_port' => 80, 'host_port' => front_port || 80, 'protocol' => 'tcp' }
end

#s3_clientAws::S3::Client (private)

Returns:

  • (Aws::S3::Client)


96
97
98
# File 'lib/hako/scripts/nginx_front.rb', line 96

def s3_client
  @s3_client ||= Aws::S3::Client.new(region: @s3.region)
end

#upload_config(front_conf) ⇒ Hash (private)

Returns:

  • (Hash)


83
84
85
86
87
88
89
90
91
92
93
# File 'lib/hako/scripts/nginx_front.rb', line 83

def upload_config(front_conf)
  if @dry_run
    puts "#{self.class} will upload this configuration:\n#{front_conf}"
  else
    s3_client.put_object(
      body: front_conf,
      bucket: @s3.bucket,
      key: @s3.key(@app.id),
    )
  end
end