lambda-version-manager 0.0.13 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/lambda-version-manager +9 -28
- data/lib/deployer.rb +21 -14
- data/lib/project.rb +3 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a06023537b8e81252217196c3273da36f59c5dff
|
4
|
+
data.tar.gz: aab71c5d45d1a99e9dabd484dd154783b983144b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64103478875e2d14a67baec6327a3f7a942fbebfef6be5f2d7bbaa7e937c01a28e48860955d202c3a280603ee14ba2ab8b6bcdd279c69a1c0c57d3e51f331342
|
7
|
+
data.tar.gz: '087c08623d652cc936344007c5808dacaa01ea05ae2a1348c8d9a5a5c41b1ea872ddbd537ea248dbf247693eef9d48a750e5e127329dea32c3633c2c0c4b9332'
|
data/bin/lambda-version-manager
CHANGED
@@ -13,29 +13,20 @@ class GeneratorCLI < ::Thor
|
|
13
13
|
option 'artifact', banner: 'ARTIFACT', type: :string, desc: 'Deploy lambdas that use this artifact'
|
14
14
|
option 'lambda', banner: 'LAMBDA', type: :string, desc: 'Deploy lambdas with this name'
|
15
15
|
option 'account', banner: 'ACCOUNT', type: :string, desc: 'Account to deploy to', :required => true
|
16
|
-
option '
|
16
|
+
option 'deploy_all', banner: 'DEPLOY_ALL', type: :boolean, desc: 'Ignore the history therefore deploy everything included in the filter', default: false
|
17
17
|
|
18
18
|
def deploy
|
19
19
|
opts = validate_deploy(options)
|
20
|
-
|
21
|
-
|
22
|
-
File.readlines(options['version_map_file']).each do |line|
|
23
|
-
array = line.split("=")
|
24
|
-
deployer = Deployer.new(opts['project_path'], opts['account'], array[0].strip)
|
25
|
-
deployer.deploy(opts['environments'])
|
26
|
-
end
|
27
|
-
else
|
28
|
-
deployer = Deployer.new(opts['project_path'], opts['account'], opts['artifact'], opts['lambda'])
|
29
|
-
deployer.deploy(opts['environments'])
|
30
|
-
end
|
20
|
+
deployer = Deployer.new(opts['deploy_all'], opts['project_path'], opts['account'], opts['artifact'], opts['lambda'])
|
21
|
+
deployer.deploy(opts['environments'])
|
31
22
|
end
|
32
23
|
|
33
24
|
desc 'update_project', 'Update the versions'
|
34
25
|
option 'project_path', banner: 'PROJECT_PATH', type: :string, desc: 'Path to the lambda version mappings project'
|
35
26
|
option 'artifact', banner: 'ARTIFACT', type: :string, desc: 'Deploy lambdas that use this artifact'
|
36
27
|
option 'version', banner: 'VERSION', type: :string, desc: 'Version of the new artifact'
|
37
|
-
option 'version_map_file', banner: 'VERSION_MAP_FILE', type: :string, desc: 'A java properties file mapping artifacts to update to version'
|
38
28
|
option 'accounts', banner: 'ACCOUNT', type: :array, desc: 'Account to deploy to', :required => true
|
29
|
+
option 'sha1', banner: 'SHA1', type: :string, desc: 'SHA1 of the artifact'
|
39
30
|
|
40
31
|
def update_project
|
41
32
|
opts = validate_project_update(options)
|
@@ -54,31 +45,21 @@ class GeneratorCLI < ::Thor
|
|
54
45
|
end
|
55
46
|
end
|
56
47
|
|
57
|
-
|
58
|
-
if opts['version_map_file']
|
59
|
-
#for each artifact=version pair we need to call
|
60
|
-
File.readlines(opts['version_map_file']).each do |line|
|
61
|
-
array = line.split("=")
|
62
|
-
updated_files = project.update_by_artifact(lambda_env_map, array[0].strip, array[1].strip)
|
63
|
-
lambda_env_map = updated_files
|
64
|
-
end
|
65
|
-
else
|
66
|
-
lambda_env_map = project.update_by_artifact(lambda_env_map, opts['artifact'], opts['version'])
|
67
|
-
end
|
48
|
+
lambda_env_map = project.update_by_artifact(lambda_env_map, opts['artifact'], opts['version'], opts['sha1'])
|
68
49
|
project.write_new_files(lambda_env_map)
|
69
50
|
end
|
70
51
|
|
71
52
|
no_commands do
|
72
53
|
def validate_project_update(options)
|
73
|
-
unless options['
|
74
|
-
raise 'Either a
|
54
|
+
unless options['version'] && (options['lambda'] || options['artifact'])
|
55
|
+
raise 'Either a version and lambda or artifact must be specified.'
|
75
56
|
end
|
76
57
|
options.dup
|
77
58
|
end
|
78
59
|
|
79
60
|
def validate_deploy(options)
|
80
|
-
unless options['
|
81
|
-
raise 'Either a
|
61
|
+
unless options['environments'] || options['lambda'] || options['artifact']
|
62
|
+
raise 'Either a environment or lambda or artifact must be specified.'
|
82
63
|
end
|
83
64
|
options.dup
|
84
65
|
end
|
data/lib/deployer.rb
CHANGED
@@ -9,8 +9,10 @@ class Deployer
|
|
9
9
|
attr_accessor :lambda
|
10
10
|
attr_accessor :artifact
|
11
11
|
attr_accessor :environments
|
12
|
+
attr_accessor :deploy_all
|
12
13
|
|
13
|
-
def initialize(project_path, account, artifact=nil, lambda=nil)
|
14
|
+
def initialize(deploy_all, project_path, account, artifact=nil, lambda=nil)
|
15
|
+
@deploy_all = deploy_all
|
14
16
|
@project_path = project_path
|
15
17
|
@account = account
|
16
18
|
@project = Project.new("#{project_path}")
|
@@ -48,12 +50,18 @@ class Deployer
|
|
48
50
|
env_region_map = project.env_region_map
|
49
51
|
#Filter by account as the primary owner of envs
|
50
52
|
lambda_env_map = project.get_lambdas
|
51
|
-
|
53
|
+
unless deploy_all
|
54
|
+
lambda_env_map = diff_projects(lambda_env_map)
|
55
|
+
if lambda_env_map.empty?
|
56
|
+
puts "No lambdas have been changed, skipping deploy"
|
57
|
+
return
|
58
|
+
end
|
59
|
+
end
|
52
60
|
lambda_env_map = get_deployable_lambdas(lambda_env_map)
|
53
61
|
environments ||= project.environments
|
54
62
|
account_env_map.each do |env|
|
55
63
|
#IF users has specified environments, skip if the environment is not a user specified one
|
56
|
-
next unless !environments.nil? && environments.include?(env)
|
64
|
+
next unless !environments.nil? && environments.include?(env) && !lambda_env_map[env].nil?
|
57
65
|
lambda_env_map[env].each do |lambda_name, properties|
|
58
66
|
client = Client.new(env_region_map[env])
|
59
67
|
|
@@ -66,8 +74,8 @@ class Deployer
|
|
66
74
|
puts "S3 Key: #{s3_key}"
|
67
75
|
client.update_function_code(lambda_name,s3_bucket,s3_key)
|
68
76
|
end
|
77
|
+
archive_project(env)
|
69
78
|
end
|
70
|
-
archive_project
|
71
79
|
end
|
72
80
|
|
73
81
|
|
@@ -88,13 +96,10 @@ class Deployer
|
|
88
96
|
end
|
89
97
|
end
|
90
98
|
|
91
|
-
def archive_project
|
92
|
-
|
93
|
-
FileUtils.remove_dir("#{project_path}/.history/environments")
|
94
|
-
FileUtils.remove_dir("#{project_path}/.history/config")
|
95
|
-
end
|
99
|
+
def archive_project(environment)
|
100
|
+
FileUtils.mkpath("#{project_path}/.history/")
|
96
101
|
FileUtils.copy_entry("#{project_path}/config","#{project_path}/.history/config")
|
97
|
-
FileUtils.copy_entry("#{project_path}/environments","#{project_path}/.history/environments")
|
102
|
+
FileUtils.copy_entry("#{project_path}/environments/#{environment}.yaml","#{project_path}/.history/environments/#{environment}.yaml")
|
98
103
|
end
|
99
104
|
|
100
105
|
def parse_archive
|
@@ -103,13 +108,15 @@ class Deployer
|
|
103
108
|
end
|
104
109
|
|
105
110
|
def diff_projects(new_project)
|
106
|
-
unless Dir.exist?("#{project_path}/.history/")
|
107
|
-
return new_project
|
108
|
-
end
|
109
111
|
historic = parse_archive
|
110
112
|
historic.each do |environment, lambdas|
|
111
113
|
lambdas.each do |lambda, configs|
|
112
|
-
if new_project[environment][lambda].
|
114
|
+
next if new_project[environment][lambda].nil?
|
115
|
+
if new_project[environment][lambda].has_key?('sha1')
|
116
|
+
if configs.has_key?('sha1') && (configs['sha1'] == new_project[environment][lambda]['sha1'])
|
117
|
+
new_project[environment].delete(lambda)
|
118
|
+
end
|
119
|
+
elsif new_project[environment][lambda].eql?(configs)
|
113
120
|
new_project[environment].delete(lambda)
|
114
121
|
end
|
115
122
|
end
|
data/lib/project.rb
CHANGED
@@ -45,13 +45,14 @@ class Project
|
|
45
45
|
end
|
46
46
|
|
47
47
|
|
48
|
+
|
48
49
|
def write_new_files(lambda_env_map)
|
49
50
|
lambda_env_map.each do |env, contents|
|
50
51
|
File.write("#{project_path}/environments/#{env}.yaml", contents.to_yaml)
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
def update_by_artifact(lambda_env_map, artifact, version)
|
55
|
+
def update_by_artifact(lambda_env_map, artifact, version, sha1=nil)
|
55
56
|
#iterate through all lambdas and update the ones with version changes
|
56
57
|
lambda_env_map.each do |env, lambda|
|
57
58
|
pp env
|
@@ -59,6 +60,7 @@ class Project
|
|
59
60
|
lambda.each do |lambda_name, properties|
|
60
61
|
if properties['artifact_name'] == artifact
|
61
62
|
properties['version'] = version
|
63
|
+
properties['sha1'] = sha1 unless sha1.nil?
|
62
64
|
end
|
63
65
|
end
|
64
66
|
end
|