serverless_redirector 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 534a6bb887966c4cf6d13a019e9881748b22c4be
|
4
|
+
data.tar.gz: 42be56020c62ca68f9b8e462a444060ce6407f45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4533d0c62c12b209a01b99b806f7becbc38b0ee5228f0d93a6478aedcd59ba7a434d65ae88696efd030d4d6ce81af071cd1047936622fe640a239b13e64b0b9
|
7
|
+
data.tar.gz: 95af1a2dcda2590ce2bff18a202b818768f4038218180c31384dd0a07923de63a169febac6b181f0782441f4036c5056e02cb73145c1d60c3e60a1e91e70cc8b
|
@@ -12,18 +12,21 @@ module ServerlessRedirector
|
|
12
12
|
attr_accessor :destination_uri, # Target for the syncing...
|
13
13
|
:manifest_path, # Where can we find out manifest?
|
14
14
|
:log_path, # If present, where do we log? (STDOUT, by default)
|
15
|
-
:dry_run
|
15
|
+
:dry_run, # Is this a dry run?
|
16
|
+
:skip_deletes, # Deletes have a special ordering to take place to avoid downtime.
|
16
17
|
|
17
18
|
def initialize(options = {})
|
18
19
|
@dry_run = false
|
19
20
|
@log_path = nil
|
20
21
|
@destination_uri = nil
|
21
22
|
@manifest_path = nil
|
23
|
+
@skip_deletes = false
|
22
24
|
unpack_options options
|
23
25
|
end
|
24
26
|
|
25
27
|
def unpack_options(options)
|
26
28
|
@dry_run = !!options[:dry_run] if options.key?(:dry_run)
|
29
|
+
@skip_deletes = !!options[:skip_deletes] if options.key?(:skip_deletes)
|
27
30
|
|
28
31
|
@manifest_path = options.fetch(:manifest_path) if options.key?(:manifest_path)
|
29
32
|
@log_path = options.fetch(:log_path) if options.key?(:log_path)
|
@@ -41,7 +44,7 @@ module ServerlessRedirector
|
|
41
44
|
manifest = create_manifest
|
42
45
|
destination = create_destination
|
43
46
|
|
44
|
-
syncer = ServerlessRedirector::Syncer.new(manifest, destination, logger)
|
47
|
+
syncer = ServerlessRedirector::Syncer.new(manifest, destination, logger, skip_deletes)
|
45
48
|
syncer.run dry_run
|
46
49
|
end
|
47
50
|
|
@@ -72,4 +75,4 @@ module ServerlessRedirector
|
|
72
75
|
|
73
76
|
|
74
77
|
end
|
75
|
-
end
|
78
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'aws-sdk'
|
2
|
+
require 'cgi'
|
2
3
|
|
3
4
|
module ServerlessRedirector
|
4
5
|
class Destination
|
@@ -61,6 +62,9 @@ module ServerlessRedirector
|
|
61
62
|
@uri = uri
|
62
63
|
@bucket_name = uri.host
|
63
64
|
@prefix = uri.path.to_s.empty? ? nil : ::File.join(uri.path[1..-1], "")
|
65
|
+
@options = CGI.parse(uri.query || "").each_with_object({}) do |(key, values), out|
|
66
|
+
out[key] = values.lastß
|
67
|
+
end
|
64
68
|
end
|
65
69
|
|
66
70
|
def existing
|
@@ -69,7 +73,7 @@ module ServerlessRedirector
|
|
69
73
|
end.map do |o|
|
70
74
|
path = o.key.dup
|
71
75
|
path.gsub! /^#{Regexp.escape(prefix)}\/?/, '' if prefix
|
72
|
-
ServerlessRedirector::Manifest::Redirect.new 'path' => path, 'url' => o.metadata[
|
76
|
+
ServerlessRedirector::Manifest::Redirect.new 'path' => path, 'url' => o.metadata[REDIRECT_HEADER_KEY].to_s
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
@@ -91,7 +95,6 @@ module ServerlessRedirector
|
|
91
95
|
REDIRECT_HEADER_KEY => location
|
92
96
|
}
|
93
97
|
})
|
94
|
-
puts "WRITTEN"
|
95
98
|
end
|
96
99
|
|
97
100
|
protected
|
@@ -99,8 +102,14 @@ module ServerlessRedirector
|
|
99
102
|
def bucket
|
100
103
|
@bucket ||= begin
|
101
104
|
client = Aws::S3::Client.new
|
102
|
-
region = client.get_bucket_location(bucket: bucket_name).location_constraint
|
103
|
-
|
105
|
+
region = @options['client'] || client.get_bucket_location(bucket: bucket_name).location_constraint
|
106
|
+
|
107
|
+
accelerate = @options['accelerate'] == "true"
|
108
|
+
|
109
|
+
regional_client = Aws::S3::Client.new(
|
110
|
+
region: region,
|
111
|
+
use_accelerate_endpoint: accelerate,
|
112
|
+
)
|
104
113
|
resource = Aws::S3::Resource.new(client: regional_client)
|
105
114
|
resource.bucket bucket_name
|
106
115
|
end
|
@@ -116,4 +125,4 @@ module ServerlessRedirector
|
|
116
125
|
|
117
126
|
end
|
118
127
|
|
119
|
-
end
|
128
|
+
end
|
@@ -5,12 +5,13 @@ require 'yaml'
|
|
5
5
|
module ServerlessRedirector
|
6
6
|
class Syncer
|
7
7
|
|
8
|
-
attr_reader :manifest, :destination, :logger
|
8
|
+
attr_reader :manifest, :destination, :logger, :skip_deletes
|
9
9
|
|
10
|
-
def initialize(manifest, destination, logger = ::Logger.new(STDOUT))
|
10
|
+
def initialize(manifest, destination, logger = ::Logger.new(STDOUT), skip_deletes = false)
|
11
11
|
@manifest = manifest
|
12
12
|
@destination = destination
|
13
13
|
@logger = logger
|
14
|
+
@skip_deletes = skip_deletes
|
14
15
|
end
|
15
16
|
|
16
17
|
def run(dry_run = false)
|
@@ -39,7 +40,9 @@ module ServerlessRedirector
|
|
39
40
|
changed = (targets.keys & contents.keys).select { |k| targets[k] != contents[k] }.map { |k| targets[k] }
|
40
41
|
|
41
42
|
[].tap do |operations|
|
42
|
-
|
43
|
+
unless skip_deletes
|
44
|
+
operations.concat removed.map { |r| Operations::RemoveRedirect.new(r) }
|
45
|
+
end
|
43
46
|
operations.concat added.map { |r| Operations::CreateRedirect.new(r) }
|
44
47
|
operations.concat changed.map { |r| Operations::UpdateDestination.new(r) }
|
45
48
|
end
|
@@ -65,4 +68,4 @@ module ServerlessRedirector
|
|
65
68
|
end
|
66
69
|
|
67
70
|
end
|
68
|
-
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverless_redirector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darcy Laycock
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|